Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何处理删除多选复选框中的条目_Ruby On Rails - Fatal编程技术网

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”}