将对象添加到喜欢的对象数组中

时间:2011-07-26 18:08:35

标签: ruby-on-rails ruby-on-rails-3

我正在开发一个列出许多活动的网站,我希望登录的用户能够将活动添加到收藏/观看事件的个人列表中。

我有

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

非常感谢任何指导,建议或提示!

1 个答案:

答案 0 :(得分: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,但这将是我如何去做的主要基石。