From 4189d5251bbf72c62ba504abbe76543cdaf92f23 Mon Sep 17 00:00:00 2001 From: Chrisbr Date: Mon, 18 Aug 2014 14:33:12 +0200 Subject: [PATCH] Removes stats controller --- app/controllers/admin/stats_controller.rb | 232 ------------------ app/views/admin/stats/_events.html.haml | 41 ---- app/views/admin/stats/_events_table.html.haml | 34 --- app/views/admin/stats/_events_time.html | 71 ------ .../admin/stats/_events_tracks.html.haml | 35 --- .../admin/stats/_events_tracks_confirmed.html | 79 ------ app/views/admin/stats/_events_tracks_new.html | 79 ------ .../stats/_events_tracks_unconfirmed.html | 79 ------ app/views/admin/stats/_events_types.html.haml | 19 -- .../admin/stats/_events_types_confirmed.html | 78 ------ app/views/admin/stats/_events_types_new.html | 78 ------ .../stats/_events_types_unconfirmed.html | 78 ------ app/views/admin/stats/_other_info.html | 70 ------ .../admin/stats/_preregistered_onsite.html | 85 ------- .../admin/stats/_registered_attended.html | 85 ------- app/views/admin/stats/_registered_time.html | 71 ------ .../admin/stats/_registrations.html.haml | 41 ---- .../admin/stats/_registrations_attendees.html | 77 ------ app/views/admin/stats/_speakers.html.haml | 37 --- app/views/admin/stats/_tickets.html.haml | 22 -- .../admin/stats/_tickets_distribution.html | 79 ------ app/views/admin/stats/_tickets_time.html | 1 - app/views/admin/stats/index.html.haml | 27 -- 23 files changed, 1498 deletions(-) delete mode 100644 app/controllers/admin/stats_controller.rb delete mode 100644 app/views/admin/stats/_events.html.haml delete mode 100644 app/views/admin/stats/_events_table.html.haml delete mode 100644 app/views/admin/stats/_events_time.html delete mode 100644 app/views/admin/stats/_events_tracks.html.haml delete mode 100644 app/views/admin/stats/_events_tracks_confirmed.html delete mode 100644 app/views/admin/stats/_events_tracks_new.html delete mode 100644 app/views/admin/stats/_events_tracks_unconfirmed.html delete mode 100644 app/views/admin/stats/_events_types.html.haml delete mode 100644 app/views/admin/stats/_events_types_confirmed.html delete mode 100644 app/views/admin/stats/_events_types_new.html delete mode 100644 app/views/admin/stats/_events_types_unconfirmed.html delete mode 100644 app/views/admin/stats/_other_info.html delete mode 100644 app/views/admin/stats/_preregistered_onsite.html delete mode 100644 app/views/admin/stats/_registered_attended.html delete mode 100644 app/views/admin/stats/_registered_time.html delete mode 100644 app/views/admin/stats/_registrations.html.haml delete mode 100644 app/views/admin/stats/_registrations_attendees.html delete mode 100644 app/views/admin/stats/_speakers.html.haml delete mode 100644 app/views/admin/stats/_tickets.html.haml delete mode 100644 app/views/admin/stats/_tickets_distribution.html delete mode 100644 app/views/admin/stats/_tickets_time.html delete mode 100644 app/views/admin/stats/index.html.haml diff --git a/app/controllers/admin/stats_controller.rb b/app/controllers/admin/stats_controller.rb deleted file mode 100644 index a6ba21b8..00000000 --- a/app/controllers/admin/stats_controller.rb +++ /dev/null @@ -1,232 +0,0 @@ -module Admin - class StatsController < Admin::BaseController - load_and_authorize_resource - load_and_authorize_resource :conference, find_by: :short_title - - def index - @registrations = @conference.registrations.includes(:user) - @registrations = @registrations.order('registrations.created_at ASC') - @registered = @conference.registrations.count - @attendees = @conference.registrations.where('attended = ?', true).count - @pre_registered = @conference.registrations - @pre_registered = @pre_registered.where('created_at < ?', @conference.start_date).count - @pre_registered_attended = @conference.registrations.where('created_at < ? AND attended = ?', - @conference.start_date, true).count - - @registered_with_partner = @conference.registrations.where('attending_with_partner = ?', - true).count - @attended_with_partner = @conference.registrations.where( - 'attending_with_partner = ? AND attended = ?', true, true).count - - @handicapped_access = @conference.registrations.where(handicapped_access_required: true).count - @handicapped_access_attended = @conference.registrations.where(handicapped_access_required: - true) - @handicapped_access_attended = @handicapped_access_attended.where(attended: true).count - @suggested_hotel_stay = @conference.registrations.where('using_affiliated_lodging = ?', - true).count - - @events = @conference.events - # Events charts - @machine_states = [['confirmed'], ['cancelled'], ['rejected'], ['withdrawn'], - ['new', 'review'], ['unconfirmed', 'accepted']] - # Types distribution per state - @type_state = {} - @machine_states.each do |state| - @type_state[state[0]] = var_state_func(@conference.event_types, 'event_type', state) - end - - # Tracks distribution per state - @no_track_all = @events.where(track_id: nil) - @no_track_new = @events.where(track_id: nil).where(state: ['new', 'review']) - @no_track_unconfirmed = @events.where(track_id: nil).where(state: 'unconfirmed') - @no_track_confirmed = @events.where(track_id: nil).where(state: 'confirmed') - @track_state = {} - @machine_states.each do |state| - @track_state[state[0]] = var_state_func(@conference.tracks, 'track', state) - end - - # Events_time chart - if @events.count > 0 - start_date = @events.minimum('created_at').strftime('%Y-%m-%d') - end_date = @events.maximum('created_at').strftime('%Y-%m-%d') - unless start_date.nil? || end_date.nil? - @events_time = var_time(start_date, end_date, @events, 'created_at') - end - end - - # Code for the table in events - @mystates = [] - @mytypes = [] - @eventstats = {} - @totallength = 0 - # Get totals per state - @events.state_machine.states.map.each do |mystate| - length = 0 - events_mystate = @events.where('state' => mystate.name) - if events_mystate.count > 0 - @mystates << mystate - events_mystate.each do |myevent| - length += myevent.event_type.length - end - @eventstats["#{mystate.name}"] = { 'count' => events_mystate.count, 'length' => length } - end - end - - @conference.event_types.each do |mytype| - events_mytype = @events.where('event_type_id' => mytype.id) - if events_mytype.count > 0 - @mytypes << mytype - end - end - @mytypes.each do |mytype| - @mystates.each do |mystate| - events_mytype = @events.where('event_type_id' => mytype.id) - events_mytype_mystate = events_mytype.where('state' => mystate.name) - typelength = 0 - if events_mytype_mystate.count > 0 - events_mytype_mystate.each do |myevent| - typelength += myevent.event_type.length - @totallength += myevent.event_type.length - end - if @eventstats[mytype.title].nil? - @eventstats[mytype.title] = { 'count' => events_mytype.count, - 'length' => events_mytype.count * mytype.length } - end - - tmp = { "#{mystate.name}" => { 'type_state_count' => events_mytype_mystate.count, - 'type_state_length' => typelength } } - @eventstats[mytype.title].merge!(tmp) - end - end - end - @eventstats['totallength'] = @totallength - - # SPEAKERS stats - @speakers = User.joins(:events).where('events.conference_id = ? AND events.state LIKE ?', - @conference.id, 'confirmed').uniq - @speaker_fields_user = %w(name email affiliation) - @speaker_fields_reg = %w(arrival departure) - # TICKETS stats - @supporter_levels = @conference.supporter_levels - @tickets = @conference.registrations.joins(supporter_registration: :supporter_level) - @tickets = @tickets.where('supporter_levels.title NOT LIKE ? ', '%Free%') - - @tickets_time = [] - - if @conference.registration_start_date && @conference.end_date && @registered > 0 && @supporter_levels - start_date = @conference.registration_start_date - end_date = @conference.end_date - levels = [] - @conference.supporter_levels.each do |level| - @tickets_time << { 'key' => level.title, 'values' => [] } - levels << ["#{level.title}"] - end - - (start_date..end_date).each do |day| - if @tickets.where('supporter_registrations.created_at LIKE ?', "%#{day}%").where( - 'supporter_levels.title' => levels).count != 0 - @conference.supporter_levels.each do |level| - - day_ticket_count = @tickets.where('supporter_registrations.created_at LIKE ? - AND supporter_levels.title LIKE ?', - "%#{day}%", "%#{level.title}%").count - - index = @tickets_time.index { |v| v['key'] == "#{level.title}" } - @tickets_time[index]['values'] << { 'label' => "#{day}", 'value' => day_ticket_count } - end - end - end - end - @tickets_distribution = [] - @tickets_time.each do |ticket| - value = ticket['values'].map { |x| x['value'] }.sum - percent = (value.to_f / @tickets.count * 100).round(2) - @tickets_distribution << { 'status' => ticket['key'], - 'value' => value, 'percent' => percent } - end - - # OTHER_INFO chart / To be 'Questions' - @other_info = [ - { 'status' => 'with partner (registered)', 'value' => @registered_with_partner }, - { 'status' => 'with partner (attended)', 'value' => @attended_with_partner }, - { 'status' => 'handicapped (registered)', 'value' => @handicapped_access }, - { 'status' => 'handicapped (attended)', 'value' => @handicapped_access_attended }, - { 'status' => 'stay at suggested hotel', 'value' => @suggested_hotel_stay } - ] - - # REGISTRATIONS, registered_time - if @conference.registration_start_date && @conference.end_date && @registered > 0 - start_date = @conference.registration_start_date - end_date = @conference.end_date - @registered_time = var_time(start_date, end_date, @registrations, 'created_at') - end - - respond_to do |format| - format.html - format.json { render json: @tickets_time.to_json } - end - end - # FUNCTIONS - def var_time(start_date, end_date, var, field) - result = [] - (start_date..end_date).each do |day| - day_var_count = var.where("#{field} LIKE ?", "%#{day}%").count - if day_var_count != 0 - result << { 'status' => "#{day}", 'value' => day_var_count } - end - end - result - end - - def var_state_func(vars, field, mystate) - result = [] - - vars.each do |myvar| - # Find events per track and state - value = @conference.events.where("#{field}_id" => myvar.id).where(state: mystate).count - # Find all events in that state - total = @conference.events.where(state: mystate).count - status = "#{myvar.name}" - - percent = 0 # rubocop:disable Lint/UselessAssignment - if value != 0 - percent = (value.to_f / total * 100).round(2) - result << { 'status' => status, 'value' => value, 'percent' => percent } - end - end - # Get no of events for which the field is not set (So that pie shows half piece for 50%) - sum = result.inject(0) { |s, hash| s + hash['value'] } - value = total - sum - if sum != 0 && value != 0 - percent = (value.to_f / total * 100).round(2) - result << { 'status' => "no #{field} set", 'value' => value, 'percent' => percent } - end - - result - end - - def speaker_reg(speaker) - speaker.registrations.where('conference_id = ? AND user_id = ?', - @conference.id, speaker.id).first - end - - def speaker_diet(reg) - @conference.dietary_choices.find(reg.dietary_choice_id) - end - - def diet_count(diet) - @conference.registrations.where('dietary_choice_id = ?', diet) - end - - def social_event_count(event) - @conference.registrations.joins(:social_events).where( - 'registrations_social_events.social_event_id = ?', event).count - end - - helper_method :speaker_reg - helper_method :speaker_diet - helper_method :diet_count - helper_method :social_event_count - end -end - diff --git a/app/views/admin/stats/_events.html.haml b/app/views/admin/stats/_events.html.haml deleted file mode 100644 index 04c07c4b..00000000 --- a/app/views/admin/stats/_events.html.haml +++ /dev/null @@ -1,41 +0,0 @@ --if @events.count > 0 - %h2{:style => "text-align: center"} - = "Events (#{@events.count})" - - .row-fluid - %h3 - %u Types per event state - - if !@conference.event_types.empty? - = render :partial => "events_types" - - else - %h4 - %i There are no tracks defined for this conference! - - .row-fluid - %h3 - %u Tracks per event state - - if @no_track_all.count > 0 - %i= " (#{pluralize(@no_track_all.count, 'event')} not assigned to a track)" - - if !@conference.tracks.empty? - = render :partial => "events_tracks" - - else - %h4 - %i There are no tracks defined for this conference! - - .row-fluid - .span12 - %h3 Proposal Submissions over time - .row-fluid - .span12#events_time - = render :partial => "events_time" - - .row-fluid - .span12 - %br - %h3 Overview of all events - .row-fluid - .span12#events_table - = render :partial => "events_table" - -- else - %h5 There are no submitted events yet. diff --git a/app/views/admin/stats/_events_table.html.haml b/app/views/admin/stats/_events_table.html.haml deleted file mode 100644 index 0477f18a..00000000 --- a/app/views/admin/stats/_events_table.html.haml +++ /dev/null @@ -1,34 +0,0 @@ -%table.table.table-bordered.table-striped - %thead - %th - - @mystates.each do |state| - %th{:colspan => 2, :style => "text-align:center"} - State "#{state.name}" - %th{:colspan => 2, :style => "text-align:center"} - Total - %br - No & Time - - %tr - %td - %b Total - - @mystates.each do |mystate| - %td - %b - = @eventstats["#{mystate.name}"]["count"] - %td - %b - #{@eventstats["#{mystate.name}"]["length"] / 60} h #{@eventstats["#{mystate.name}"]["length"] - @eventstats["#{mystate.name}"]["length"] / 60 * 60} m - %td - %b= @events.count - %td - %b= show_time(@eventstats["totallength"]) - - - @mytypes.each do |mytype| - %tr - %td= "#{mytype.title} (#{show_time(mytype.length)})" - - @mystates.each do |mystate| - %td= @eventstats["#{mytype.title}"]["#{mystate.name}"]["type_state_count"] unless @eventstats["#{mytype.title}"]["#{mystate.name}"] == nil - %td= show_time(@eventstats["#{mytype.title}"]["#{mystate.name}"]["type_state_length"]) unless @eventstats["#{mytype.title}"]["#{mystate.name}"] == nil - %td= @eventstats["#{mytype.title}"]["count"] - %td= show_time(@eventstats["#{mytype.title}"]["length"]) diff --git a/app/views/admin/stats/_events_time.html b/app/views/admin/stats/_events_time.html deleted file mode 100644 index 25f18d6b..00000000 --- a/app/views/admin/stats/_events_time.html +++ /dev/null @@ -1,71 +0,0 @@ - \ No newline at end of file diff --git a/app/views/admin/stats/_events_tracks.html.haml b/app/views/admin/stats/_events_tracks.html.haml deleted file mode 100644 index 6ecef217..00000000 --- a/app/views/admin/stats/_events_tracks.html.haml +++ /dev/null @@ -1,35 +0,0 @@ -.row-fluid - - if !@track_state['new'].empty? - .span4 - %h4 New Submissions - - if @no_track_new.count > 0 - %h5= "#{pluralize(@no_track_new.count, 'event')} not assigned to a track" - - else - %h5 - .row-fluid - .span12#events_tracks_new - = render :partial => "events_tracks_new" - - - if !@track_state['unconfirmed'].empty? - .span4 - %h4 Accepted (Unconfirmed) - - if @no_track_unconfirmed.count > 0 - %h5= "#{pluralize(@no_track_unconfirmed.count, 'event')} not assigned to a track" - - else - %h5 All events assigned to track! - - .row-fluid - .span12#events_tracks_unconfirmed - = render :partial => "events_tracks_unconfirmed" - - - if !@track_state['confirmed'].empty? - .span4 - %h4 Accepted (Confirmed) - - if @no_track_confirmed.count > 0 - %h5= "#{pluralize(@no_track_confirmed.count, 'event')} not assigned to a track" - - else - %h5 All events assigned to track! - - .row-fluid - .span12#events_tracks_confirmed - = render :partial => "events_tracks_confirmed" diff --git a/app/views/admin/stats/_events_tracks_confirmed.html b/app/views/admin/stats/_events_tracks_confirmed.html deleted file mode 100644 index d031ed30..00000000 --- a/app/views/admin/stats/_events_tracks_confirmed.html +++ /dev/null @@ -1,79 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_events_tracks_new.html b/app/views/admin/stats/_events_tracks_new.html deleted file mode 100644 index d8d4e81c..00000000 --- a/app/views/admin/stats/_events_tracks_new.html +++ /dev/null @@ -1,79 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_events_tracks_unconfirmed.html b/app/views/admin/stats/_events_tracks_unconfirmed.html deleted file mode 100644 index 1af6b1ad..00000000 --- a/app/views/admin/stats/_events_tracks_unconfirmed.html +++ /dev/null @@ -1,79 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_events_types.html.haml b/app/views/admin/stats/_events_types.html.haml deleted file mode 100644 index 3d6ac9fd..00000000 --- a/app/views/admin/stats/_events_types.html.haml +++ /dev/null @@ -1,19 +0,0 @@ -.row-fluid - - if !@type_state['new'].empty? - .span4 - %h4 New Submissions: #{@type_state['new'].map{|x| x["value"]}.sum} - .row-fluid - .span12#events_types_new - = render :partial => "events_types_new" - - if !@type_state['unconfirmed'].empty? - .span4 - %h4 Accepted (Unconfirmed): #{@type_state['unconfirmed'].map{|x| x["value"]}.sum} - .row-fluid - .span12#events_types_unconfirmed - = render :partial => "events_types_unconfirmed" - - if !@type_state['confirmed'].empty? - .span4 - %h4 Accepted (Confirmed): #{@type_state['confirmed'].map{|x| x["value"]}.sum} - .row-fluid - .span12#events_types_confirmed - = render :partial => "events_types_confirmed" \ No newline at end of file diff --git a/app/views/admin/stats/_events_types_confirmed.html b/app/views/admin/stats/_events_types_confirmed.html deleted file mode 100644 index 247e8a14..00000000 --- a/app/views/admin/stats/_events_types_confirmed.html +++ /dev/null @@ -1,78 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_events_types_new.html b/app/views/admin/stats/_events_types_new.html deleted file mode 100644 index fc560371..00000000 --- a/app/views/admin/stats/_events_types_new.html +++ /dev/null @@ -1,78 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_events_types_unconfirmed.html b/app/views/admin/stats/_events_types_unconfirmed.html deleted file mode 100644 index 4335eab0..00000000 --- a/app/views/admin/stats/_events_types_unconfirmed.html +++ /dev/null @@ -1,78 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_other_info.html b/app/views/admin/stats/_other_info.html deleted file mode 100644 index 33dd56eb..00000000 --- a/app/views/admin/stats/_other_info.html +++ /dev/null @@ -1,70 +0,0 @@ - \ No newline at end of file diff --git a/app/views/admin/stats/_preregistered_onsite.html b/app/views/admin/stats/_preregistered_onsite.html deleted file mode 100644 index f8b9038e..00000000 --- a/app/views/admin/stats/_preregistered_onsite.html +++ /dev/null @@ -1,85 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_registered_attended.html b/app/views/admin/stats/_registered_attended.html deleted file mode 100644 index 67c9006c..00000000 --- a/app/views/admin/stats/_registered_attended.html +++ /dev/null @@ -1,85 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_registered_time.html b/app/views/admin/stats/_registered_time.html deleted file mode 100644 index e3de08e0..00000000 --- a/app/views/admin/stats/_registered_time.html +++ /dev/null @@ -1,71 +0,0 @@ - \ No newline at end of file diff --git a/app/views/admin/stats/_registrations.html.haml b/app/views/admin/stats/_registrations.html.haml deleted file mode 100644 index d57b2620..00000000 --- a/app/views/admin/stats/_registrations.html.haml +++ /dev/null @@ -1,41 +0,0 @@ -.row - .col-md-4 - - if @registered > 0 - - if @attendees > 0 - %h4{:style => "text-indent: 25px"}= "Registrations - Attendees (#{(@attendees.to_f / @registered * 100).round }%)" - - else - %h4{:style => "text-indent: 25px"}= "Registrations - Attendees" - .row-fluid - .span12#registrations_attendees - = render :partial => "registrations_attendees" - - else - %h5 There are no registrations yet. - - .col-md-4 - - if @registered > 0 - %h4{:style => "text-indent: 10px"}= "Attendance of pre-registered" - .row-fluid - .span12#registered_attended - = render :partial => "registered_attended" - - .col-md-4 - - if @registered > 0 - %h4{:style => "text-indent: 25px"}= "% of pre-registered" - .row-fluid - .span12#preregistered_onsite - = render :partial => "preregistered_onsite" - -.row - .col-md-6 - - if @registered > 0 - %h4= "Other Info" - .row-fluid - .span12#other_info - = render :partial => "other_info" - - .col-md-6 - - if @registered > 0 - %h4{:style => "text-indent: 98px"}= "Registrations over time" - .row-fluid - .span12#registered_time - = render :partial => "registered_time" diff --git a/app/views/admin/stats/_registrations_attendees.html b/app/views/admin/stats/_registrations_attendees.html deleted file mode 100644 index 89079236..00000000 --- a/app/views/admin/stats/_registrations_attendees.html +++ /dev/null @@ -1,77 +0,0 @@ - \ No newline at end of file diff --git a/app/views/admin/stats/_speakers.html.haml b/app/views/admin/stats/_speakers.html.haml deleted file mode 100644 index 1525126c..00000000 --- a/app/views/admin/stats/_speakers.html.haml +++ /dev/null @@ -1,37 +0,0 @@ -- count =0 -%h3 - Speakers (#{@speakers.length}) -%table.table.table-striped.table-bordered.table-hover#speakertable - %thead - %th - ID - - (@speaker_fields_user + @speaker_fields_reg).each do |field| - %th - = field.capitalize - - @speakers.each do |speaker| - %tr - %td - = count +=1 - - @speaker_fields_user.each do |field| - %td - = speaker.send(field.to_sym) - - @speaker_fields_reg.each do |field| - %td - - reg = speaker_reg(speaker) - - if !reg.nil? - - if field == "diet" - - if reg.dietary_choice_id - = speaker_diet(reg).title - %br - = reg.other_dietary_choice - - elsif field == 'arrival' || field == 'departure' - = getdatetime(reg, field) - - else - = reg.send(field.to_sym) - -:javascript - $(document).ready(function(){ - $('#speakertable').dataTable({ - "bPaginate": false - }); - }); \ No newline at end of file diff --git a/app/views/admin/stats/_tickets.html.haml b/app/views/admin/stats/_tickets.html.haml deleted file mode 100644 index f9e25c39..00000000 --- a/app/views/admin/stats/_tickets.html.haml +++ /dev/null @@ -1,22 +0,0 @@ -- if @tickets.length > 0 - .row-fluid - .span12 - %h2 - = "Non-Free Tickets (#{@tickets.count})" - .row-fluid - .span4 - %h4 Ticket distribution - .row-fluid - .span12#tickets_distribution - = render :partial => "tickets_distribution" - .row-fluid - .span10 - %h4 Ticket sales over time - .row-fluid - .span12#tickets_time - = render :partial => "tickets_time" -- else - - if @conference.use_supporter_levels - %h5 No tickets have been bought yet. - - else - %h5 There are no tickets set for this conference. \ No newline at end of file diff --git a/app/views/admin/stats/_tickets_distribution.html b/app/views/admin/stats/_tickets_distribution.html deleted file mode 100644 index b12163d1..00000000 --- a/app/views/admin/stats/_tickets_distribution.html +++ /dev/null @@ -1,79 +0,0 @@ - - - \ No newline at end of file diff --git a/app/views/admin/stats/_tickets_time.html b/app/views/admin/stats/_tickets_time.html deleted file mode 100644 index 6e0b8d44..00000000 --- a/app/views/admin/stats/_tickets_time.html +++ /dev/null @@ -1 +0,0 @@ -(Not yet implemented) \ No newline at end of file diff --git a/app/views/admin/stats/index.html.haml b/app/views/admin/stats/index.html.haml deleted file mode 100644 index a18f9642..00000000 --- a/app/views/admin/stats/index.html.haml +++ /dev/null @@ -1,27 +0,0 @@ -.row - .col-md-12 - %ul.nav.nav-tabs#myTab - %li.active - %a{:href=>"#registrations", "data-toggle"=>"tab"} Registrations - %li - %a{:href=>"#events", "data-toggle"=>"tab"} Events - %li - %a{:href=>"#speakers", "data-toggle"=>"tab"} Speakers - %li - %a{:href=>"#tickets", "data-toggle"=>"tab"} Tickets - - .tab-content - .tab-pane.active#registrations - = render :partial => 'registrations' - .tab-pane#events - = render :partial => 'events' - .tab-pane#speakers - = render :partial => 'speakers' - .tab-pane#tickets - = render :partial => 'tickets' - -:javascript - $('#myTab a').click(function (e) { - e.preventDefault(); - $(this).tab('show'); - })