2011-07-26 43 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

同意。制作另一个模型很容易,并且比超载配置文件的含义更容易理解。 –