2010-02-14 52 views
1

嘿,我一直在使用has_and_belongs_to_many关系与Railscast Episode #17复选框示例。我有一些问题,现在一切工作顺利,除非更新按钮不起作用。更新与HABTM关系复选框的值 - Rails

编辑视图看起来像这样

<% form_for :users, :action => 'update' do |f| %> 
<% for interest in Interest.find(:all) %> 
<div> 
<%= check_box_tag "user[interest_ids][]", interest.id, 
       @user.interests.include?(interest) %> 
<%= interest.name %> 
</div> 
<% end %> 
<p> 
<%= f.submit 'Update' %> 
</p> 
<% end %> 

,并在控制器我....

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 

我的用户模型,但仍然没有任何...我的想法为什么我的表单不提交?

回答

0

我发挥各地形式和正确的代码是这个==>

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

我很高兴!所以显然问题是:用户应该是对象@user。

+0

这并不处理您将它们全部取消选中时的情况。 – 2012-05-01 21:18:08

+0

并没有工作在最新版本的导轨 – 2012-10-18 17:29:14

+0

当我们有所有未经检查的导轨将删除所有关系 – antiqe 2013-01-21 11:13:49

0

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| %> 
<li> 
<%= 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 %> 
<label class="checkbox" for="<%= "ad_size_#{s.name}" %>"><%= s.description %></label> 
</li> 
<% end %> 
+0

但不是代码在railscast?我试过你的代码,它没有工作。没有什么东西还在更新中,我感觉它与表单中的某些东西有关,因为它在按钮点击后没有做任何重定向。 – ChrisWesAllen 2010-02-15 00:04:38

+0

代码类似,为true。顺便说一句,你的'form_for'定义有错误。它应该读取<%form_for:user,:action =>'update'do | f | %>' – 2010-02-15 00:07:56

+0

正确的我的意思是为什么没有在railscast中的代码?我调整了form_for,但你提供的代码段似乎并没有工作。我想知道为什么它还没有做任何重定向。 – ChrisWesAllen 2010-02-15 00:27:41