Ruby on rails Rails-连接复选框以更改联接表的值

Ruby on rails Rails-连接复选框以更改联接表的值,ruby-on-rails,checkbox,has-and-belongs-to-many,Ruby On Rails,Checkbox,Has And Belongs To Many,我有两个模型事件和兴趣,它们通过联接表迁移EventsInterests(event\u id,interest\u id,id=>false)连接起来 我试图创建一些东西,你可以将一组兴趣类别连接到我的应用程序中的一些事件 我直接在数据库中创建了一条记录,它正确地显示了出来,所以我很确定复选框部分是正确的;但我根本无法编辑记录。如果我通过复选框添加另一个兴趣,什么也不会发生。我没有收到任何错误,并且日志显示它调用联接表,所以我猜问题出在我的update语句中 我想这是一个属性可访问的部分,但我

我有两个模型事件和兴趣,它们通过联接表迁移EventsInterests(event\u id,interest\u id,id=>false)连接起来

我试图创建一些东西,你可以将一组兴趣类别连接到我的应用程序中的一些事件

我直接在数据库中创建了一条记录,它正确地显示了出来,所以我很确定复选框部分是正确的;但我根本无法编辑记录。如果我通过复选框添加另一个兴趣,什么也不会发生。我没有收到任何错误,并且日志显示它调用联接表,所以我猜问题出在我的update语句中

我想这是一个属性可访问的部分,但我不知道如何为联接表添加它……我只是删除它吗

events.rb

  has_and_belongs_to_many :interests
  attr_accessible :name, :category
利息.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>

如果你想更新这样的模型,你应该使用一个has_-many:through关系。 只有在仅创建/删除关系时,具有和属于模型才有意义

 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