Ruby on rails 如何处理删除多选复选框中的条目
这是这里提出的问题的继续Ruby on rails 如何处理删除多选复选框中的条目,ruby-on-rails,Ruby On Rails,这是这里提出的问题的继续 class Foo”令牌“,”foo“=>{”name“=>”foo Test 1“,”bar“=>[“3”,“5”,“6”],”id“=>”1”}
class Foo
如何处理删除多选复选框中的条目用于表示一对多实体。我可以添加或更新条目,但删除似乎失败,因为foo\u id似乎为空,并且查询似乎正在更新而不是删除
编辑:
我使用以下代码尝试了@charlysisto建议
我的控制器代码如下:
class Foo < ActiveRecord::Base
has_many :foo_bars
has_many :bars, :through => :foo_bars
end
def edit
@foo = Foo.find(params[:id])
@sites = Site.where(company_id: @current_user.company_id).all
end
def update
@foo = Foo.find(params[:id])
if @foo.update_attributes(params[:foo])
flash[:notice] = "Foo was successfully updated"
redirect_to foos_path
else
render :action => 'edit'
end
end
<% @bars.each do |bar| %>
<%= check_box_tag 'bar_ids[]', bar.id %>
<%= bar.name %>
<% end %>
class Foo:foo\u条
结束
定义编辑
@foo=foo.find(参数[:id])
@sites=Site.where(公司id:@current\u user.company\u id)。全部
结束
def更新
@foo=foo.find(参数[:id])
如果@foo.update_属性(参数[:foo])
flash[:notice]=“Foo已成功更新”
将_重定向到foos_路径
其他的
呈现:操作=>“编辑”
结束
结束
查看代码如下:
class Foo < ActiveRecord::Base
has_many :foo_bars
has_many :bars, :through => :foo_bars
end
def edit
@foo = Foo.find(params[:id])
@sites = Site.where(company_id: @current_user.company_id).all
end
def update
@foo = Foo.find(params[:id])
if @foo.update_attributes(params[:foo])
flash[:notice] = "Foo was successfully updated"
redirect_to foos_path
else
render :action => 'edit'
end
end
<% @bars.each do |bar| %>
<%= check_box_tag 'bar_ids[]', bar.id %>
<%= bar.name %>
<% end %>
因此,我尝试了这些更改,但如果我删除了一条记录,foo_条似乎仍然不能反映这些更改。您的关联中缺少的是:
class Foo < ActiveRecord::Base
has_many :bars, :through => :foo_bars
end
就这样!无需手动设置或删除FooController#update…(更新)中的关联。感谢您的回复!事实上,我有foo_条而不是条,不确定逻辑是否仍然成立。因为我将不得不列出许多条,用户将选择或取消选择一个应该创建foo_条的特定条。我的数据模型出现在上一张票证中。请参阅我的更新(基本上您必须使用has\u many-through),rails会处理其余部分(再次使用bar\u id=直接,foo\u bar只是一个联接表,对您来说是透明的)。如果我删除了一条记录,foo\u bar似乎不会反映更改。您是否尝试过
选择:bar\u id…
?您的控制器通过表单的复选框版本接收哪些参数。FooController处理#更新为HTML参数:{“utf8”=>“✓", "真实性\u令牌“=>”令牌“,”foo“=>{”name“=>”foo Test 1“,”bar“=>[“3”,“5”,“6”],”id“=>”1”}