使用has_many创建和更新:通过Rails

时间:2015-03-18 05:03:22

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我在Rails 4中分配has_many: through时遇到了一些麻烦。

我有一个功能has_many: through,表productsprograms加在表格program_products。我的模型运行正常,Product.programs = Program.all成功将programs分配给products。但是,我无法弄清楚如何在视图中获得该功能。

我读过最常见的方法是使用collection_check_boxes,所以我在表单视图中设计了以下内容:

<%= form_for(@product) do |f| %>
    <%= f.collection_check_boxes(:programs, Program.all, :id, :name ) %>
    <%= f.submit %>
<% end %>

这给了我

的HTML输出
<input type="checkbox" value="1" name="product[programs][]" id="product_programs_1">
<input type="checkbox" value="2" name="product[programs][]" id="product_programs_2">

等等。

当我提交表格时,我会在参数中得到这个回复:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"xxx",
 "product"=>{"name"=>"Test",
 "description"=>"desc test",
 "price"=>"10",
 "programs"=>["1",
 "2",
 "3",
 ""]},
 "commit"=>"Update Product",
 "id"=>"18"}

没有错误。但是,我的数据库从未实际更新过,所以我无法弄清楚出了什么问题。以下是我的控制器的重要部分:

products_controller.rb(主CRUD控制器)

def update
    @product = Product.find(params[:id])
    if @product.update_attributes(product_params)
        redirect_to(pages_dashboard_path)
    end
end

  private

  def product_params
    params.require(:product).permit(:name, :description, :price, :programs)
  end

我无法弄清楚出了什么问题,因为我没有得到任何彻底的错误。 Rails上的collection_check_boxes文档相当混乱,所以我怀疑我的错误可能在于该设置。

由于

1 个答案:

答案 0 :(得分:1)

我认为您应该在program_ids电话中使用programs代替collection_check_boxes。并确保在permition方法中也改变它。