2011-07-26 27 views
2

我正在一個列出很多事件的網站上工作,我希望登錄的用戶能夠將事件添加到收藏夾/觀看事件的個人列表。將對象添加到收藏夾對象數組

event.rb

has_and_belongs_to_many :profiles 

profile.rb

has_and_belongs_to_many :events 

如果用戶登錄,我想一個每個按鈕事件視圖,將該事件添加到current_user的配置文件。基本上,這個功能:

current_user.profile.events < <事件

它可以做的是,在控制檯,但我無法弄清楚如何創建一種形式,做到這一點。從這個看這個網站上的各種答案,這就是我:

的routes.rb

map.resources :events, :member => { :create_calendar => :post } 

_event.html.erb

<%= form_for(current_user.profile.events(event)) do |f| %> 
    <%= f.submit "Add to Calendar" %> 
<% end %> 

events_controller.rb

def create_calendar 
    @event = Event.find(params[:event_id]) 
    current_user.profile.events << @event 
end 

任何指導,建議或提示將非常感激!

回答

3

我不是has_and_belongs_to_many的粉絲,所以我的建議是將它拋棄並製作一個新模型。也許是這樣的

class SavedEvent < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :event 
end 

然後,你可以做這樣的事情:

事件查看:

form_for SavedEvent.new, :url => "/events/save_event" do |f| 
    f.hidden_field :event_id, :value => @event.id 
    f.submit "Save Event" 
end 

然後將其保存:

def save_event 
    @saved_event = SavedEvent.new(params[:saved_event] 
    @saved_event.user = current_user 
    @saved_event.save 
end 

當然,你可以修剪這個稍微降低一點,使它更加RESTful,但這將是我如何去做doi的主要構建塊它。

+0

同意。製作另一個模型很容易,並且比超載配置文件的含義更容易理解。 –