与Rails 4中的嵌套表单有多对多的关系 - 未允许的参数错误

时间:2014-06-13 21:11:28

标签: ruby-on-rails

我试图通过Categorizations模型将Products控制器中的关系设置为ClothingSize模型。我得到一个"未经许可的参数:clothing_size"错误,结果永远不会产生关系。我认为视图中的嵌套表单有问题,因为我无法得到"尺寸"除非符号如下所示,否则将出现字段。我认为这可能指向另一个问题。

<%= form_for(@product) do |f| %>
      <%= f.fields_for :clothing_size do |cs| %> 

模型

产品

class Product < ActiveRecord::Base
  has_many :categorizations
  has_many :clothing_sizes, through: :categorizations
  accepts_nested_attributes_for :categorizations
end

分类已

class Categorization < ActiveRecord::Base
  belongs_to :product
  belongs_to :clothing_size
  accepts_nested_attributes_for :clothing_size
end

ClothingSizes

class ClothingSize < ActiveRecord::Base
  has_many :categorizations
  has_many :products, through: :categorizations
  accepts_nested_attributes_for :categorizations
end

产品控制器

def new
  @product = Product.new
  test = @product.categorizations.build


  def product_params
        params.require(:product).permit(:title, :description, :image_url, :image_url2, :price, :quantity, :color, :clothing_sizes => [:sizes, :clothing_size_id])
  end
end

查看

<%= form_for(@product) do |f| %>
  <%= f.fields_for :clothing_size do |cs| %>
    <div class="field">
      <%= cs.label :sizes, "Sizes" %><br>
      <%= cs.text_field :sizes  %>
    </div>
  <% end %>
<% end %>

1 个答案:

答案 0 :(得分:2)

在您看来,您有:clothing_size(单数),但在product_params方法中,您有:clothing_sizes(复数)。由于您的Product模型has_many :clothing_sizes,您希望它在您的视图中为复数。

<%= form_for(@product) do |f| %>
  <%= f.fields_for :clothing_sizes do |cs| %>

此外,您还希望为控制器中的clothing_size构建product,并允许:clothing_sizes_attributes而不是clothing大小product_params 1}}方法。 (我将newproduct_params方法分开,将product_params设为私有,但这仅仅是我。)

def new
  @product = Product.new
  @clothing_size = @product.clothing_sizes.build
end

private
  def product_params
    params.require(:product).permit(:title, :description, :image_url, :image_url2, :price, :quantity, :color, :clothing_sizes_attributes => [:sizes, :clothing_size_id])
  end