使用HABTM关系更新复选框的值 – Rails

嘿伙计们我一直在使用与Railscast第17集中的复选框示例的has_and_belongs_to_many关系。 我有一些问题,现在一切都很顺利,除了更新按钮不起作用。

编辑视图看起来像这样

 'update' do |f| %>  

在我的控制器….

 def edit @user = User.find(session[:user_id]) end def update params[:user][:interest_ids] ||= [] @user = User.find(session[:user_id]) if @user.update_attributes(params[:user]) flash[:notice]='User data was updated' redirect_to :action => 'index' else redirect_to :action => 'index' end end 

按钮不是重定向的事件……所以我不知道发生了什么。 我的表单创作中有什么东西弄乱了吗? 我不确定如何创建一个按钮,让它访问控制器中的方法,模型更新等。

我环顾四周寻求帮助,想到也许是因为attr_accessible所以我添加了=>

  attr_accessible :login, :email, :password, :password_confirmation, :interest_ids, :user 

到我的用户模型但仍然没有…我知道为什么我的表单没有提交?

我玩了表格,正确的代码是==>

 <% form_for @user do |f| %> <% for interest in Interest.find(:all) %> 
<%= check_box_tag "user[interest_ids][]", interest.id, @user.interests.include?(interest) %> <%= interest.name %>
<% end %>

<%= f.submit 'Edit' %>

<% end %>

我很开心! 显然问题是:用户应该是@user对象。

check_box标记必须如下所示才能正常工作:

 <%= check_box "user", "user_interest_ids", {:checked => @user.interests.include?(interest), :name => 'user[interest_ids][]'}, interest.id, nil %> 

在我的广告< - > ad_sizes habtm关系我正在使用此代码:

 <% @ad_sizes.each do |s| %> 
  • <%= check_box "ad", "ad_size_ids", {:checked => @ad.ad_sizes.include?(s), :id => "ad_size_#{s.name}", :class => 'checkbox', :name => 'ad[ad_size_ids][]'}, s.id, nil %>
  • <% end %>