Rails - 连接复选框以更改连接表的值

时间:2011-01-05 23:24:12

标签: ruby-on-rails checkbox has-and-belongs-to-many

我有两个模型事件和兴趣,它们通过连接表迁移EventsInterests(event_id,interest_id,id => false)连接。

我试图创建一些可以将一组兴趣类别连接到我的应用程序中的某些事件的内容。

我直接在数据库中创建了一个记录并且它正确显示,所以我很确定复选框部分是正确的;但我根本无法编辑记录。如果我通过复选框添加另一个兴趣,没有任何反应..我没有得到任何错误,日志显示它调用连接表,所以我猜这个问题是我的更新声明.....

我用attr_accessible部分思考它,但我不知道如何为连接表添加....我只是删除它吗?

events.rb

  has_and_belongs_to_many :interests
  attr_accessible :name, :category

interests.rb

  has_and_belongs_to_many :events

在我的编辑表单中,我想将记录添加到连接表中,它看起来像这样。

<%= form_for @event do |f| %>
<%= f.error_messages %>

<p>
   <%= f.label :title %><br />
    <%= f.text_field :title %>
 </p>

 <% for interest in @interests %>
<div>
<%= check_box_tag "event[interest_ids][]", interest.id, @event.interests.include?(interest) %>
<%= interest.name %>
</div>
<% end %>   
   <p><%= f.submit %></p>

并且控制器中的编辑/更新部分看起来像

 def update
@event = Event.find(params[:id])
params[:event][:interest_ids] ||= []
if @event.update_attributes(params[:event])
  flash[:notice] = "Successfully updated event."
  redirect_to @event
else
  render :action => 'edit'
end
  end

1 个答案:

答案 0 :(得分:0)

如果要更新此类模型,则应使用has_many:through关系。 只有创建/删除关系才有意义和属于模型。

请参阅http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association