我正在开发一个列出许多活动的网站,我希望登录的用户能够将活动添加到收藏/观看事件的个人列表中。
我有
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
非常感谢任何指导,建议或提示!
答案 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,但这将是我如何去做的主要基石。