Skip to content

Instantly share code, notes, and snippets.

@dopa
Created October 23, 2013 13:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dopa/7118466 to your computer and use it in GitHub Desktop.
Save dopa/7118466 to your computer and use it in GitHub Desktop.
Cocoon Events+Speakers Issue Models and Controllers
Thank you!
Relevant parts of models:
class Event < ActiveRecord::Base
  attr_accessible :meeting_id,
                  :session_name,
                  :description,
                  :event_type_id,
                  :start_date_time,
                  :end_date_time,
                  :is_public,
                  :private_messages_by_default,
                  :location_simple,
                  :speaker_slots_attributes,
                  :ratings_count,
                  :average_rating,
                  :embed_html,
                  :slide_deck_embed_html
belongs_to :meeting, touch: true
has_many :speaker_slots, :dependent => :destroy
has_many :speakers, :through => :speaker_slots #, :class_name => 'SpeakerSlot'
accepts_nested_attributes_for :speakers
accepts_nested_attributes_for :speaker_slots, :reject_if => :all_blank, :allow_destroy => true
class SpeakerSlot < ActiveRecord::Base
attr_accessible :event_id,
:speaker_id
belongs_to :event, touch: true
belongs_to :speaker, touch: true
accepts_nested_attributes_for :speaker, :reject_if => :all_blank
class Speaker < ActiveRecord::Base
attr_accessible :org_id,
:name,
:company,
:title,
:email,
:avatar,
:twitter_handle,
:twitter_uid,
:bio,
:sort_order,
:active,
:average_rating,
:mention_count
belongs_to :org
delegate :name, :to => :org, :prefix => true
has_many :speaker_slots, :dependent => :destroy
has_many :events, :through => :speaker_slots
Relevant parts of controllers:
class EventsController < ApplicationController
# POST /events
# POST /events.json
def create
@event = @meeting.events.build(params[:event])
# needs to be here in case of validation errors
@sdt = @event.start_date_time #.in_time_zone
respond_to do |format|
if @event.save
format.html { redirect_to meeting_events_url(@meeting), notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html { render "new" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
# PUT /events/1
# PUT /events/1.json
def update
@event = Event.find(params[:id])
# needs to be here in case of validation errors
@sdt = @event.start_date_time #.in_time_zone
respond_to do |format|
if @event.update_attributes(params[:event])
format.html { redirect_to meeting_events_url(@meeting), notice: 'Event was successfully updated.' }
format.json { head :no_content }
else
format.html { render "edit" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment