Ruby on rails Can';t质量分配受保护的属性:数量

Ruby on rails Can';t质量分配受保护的属性:数量,ruby-on-rails,Ruby On Rails,我得到了这个错误: 无法批量分配受保护的属性:数量 我在网站上查找了所有关于这个问题的帖子,但是找不到任何东西来回答我的问题。以下是代码片段: product.rb 类产品:true, :如果=>proc{attrs}attrs.all{{k,v{v.blank?} new.html.erb 产品(U路径)do | f |%> “数量/形式”, :locals=>{:form=>child}%> '获取'执行%> 您要添加多少项?(1-100) 1...100 %> 到哪个仓库? 1.

我得到了这个错误:

无法批量分配受保护的属性:数量

我在网站上查找了所有关于这个问题的帖子,但是找不到任何东西来回答我的问题。以下是代码片段:

product.rb
类产品:true,
:如果=>proc{attrs}attrs.all{{k,v{v.blank?}
new.html.erb

产品(U路径)do | f |%>

“数量/形式”, :locals=>{:form=>child}%> '获取'执行%>

您要添加多少项?(1-100) 1...100 %>
到哪个仓库? 1...100 %> '已提交'>

产品控制器.rb
def新建
@product=product.new
如果参数[“已提交”]
@was_submitted=true
@金额形式=参数['amount']
@新产品\u数组=[]
(1.@amount\u form.to\u i).每个人
@新_product_数组@product}
结束
结束
def创建
i=0
logger.info参数[:新产品\u数组]。检查
参数[:new_product_数组]。每个do都有新的_乘积|
如果是新产品,最后一个[:名称]!=无
@new_product_数组[i]=product.new(new_product.last)
@新产品\u数组[i]。保存
i+=1
结束
结束
重定向到(产品路径)
结束
数量.rb
类数量
数量/_form.html.erb




总的来说,我想做的是询问用户要添加多少产品,然后用用户指定的字段数和一个提交按钮制作一个表单,添加所有产品,而当您添加产品时,您也会添加一个数量记录,其中包含产品的更多信息。

您需要这样一行:

attr_accessible :name, :quantities_attributes, :quantities

你有非常糟糕的代码,它可以是非常简单的100%


您的问题是表单对您的资源(产品)一无所知,因此它无法“智能”呈现“数量”字段“属性”,而是呈现“数量”。

是否有“@was\u submitted”来告诉您是否正在加载new.html.erb?那个新控制器看起来真难看!停止你正在做的事情,阅读这本书,我还推荐Rails 3的使用!谢谢你的提示,伙计们,我会开始阅读,谢谢你的修复,我知道代码是坏的,但至少现在我明白了它不好的原因working@YardenEitan,我认为,一旦您看到一些rails应用程序的示例,您就可以从下面的示例开始,这将非常有帮助。
<% if @was_submitted %>
  <%= form_for(:new_product_array, :url => products_path) do |f| %>
    <% prefix ||= 0 %>
    <% @new_product_array.each do |n| %>
      <% n.quantities.build %>
      <% prefix += 1 %>
      <%= f.fields_for(prefix.to_s ) do |child| %>
        <div class="field">
          <%= child.label :name %><br />
          <%= child.text_field :name%>
        </div>
        <%= render :partial => 'quantities/form',
                   :locals => {:form => child} %>
      <% end %>
    <% end %>
    <div class="actions">
      <%= submit_tag :submit %>
    </div>
  <% end %>
<% else %>
  <%= form_tag new_product_path, :method => 'get' do %>
  <p align=center>
    How many Items are you Adding? (1-100)
    <%= number_field_tag 'amount', 1, :in => 1...100 %>
    </br>
    To which storage?
    <%= number_field_tag 'storage', 1, :in => 1...100 %>
    <%= submit_tag "Next", :name => 'submitted' %>
  </p>
  <% end %>
<% end %>
<%= link_to 'Back', products_path %>
def new
  @product = Product.new

  if params['submitted'] 
    @was_submitted = true
    @amount_form = params['amount']
    @new_product_array = []
    (1..@amount_form.to_i).each do
      @new_product_array << Product.new
    end
    @storage_form = params['storage']
  else
    @was_submitted = false
  end

  respond_to do |format|
    format.html # new.html.erb
    format.json { render :json => @product }
  end
end

def create
  i=0
  logger.info params[:new_product_array].inspect
  params[:new_product_array].each do |new_product|
    if new_product.last[:name] != nil
      @new_product_array[i] = Product.new(new_product.last)
      @new_product_array[i].save
      i+=1
    end
  end
  redirect_to(products_path)
end
class Quantity < ActiveRecord::Base
  belongs_to :product
  attr_accessible :amount, :storage
end
<%= form.fields_for :quantities do |quant| %>
  <div class="field">
    <%= quant.label :storage %><br />
    <%= quant.number_field :storage %>
  </div>
  <div class="field">
    <%= quant.label :amount %><br />
    <%= quant.number_field :amount %>
  </div>
  <% unless quant.object.nil? || quant.object.new_record? %>
    <div class="field">
      <%= quant.label :_destroy, 'Remove:' %>
      <%= quant.check_box :_destroy %>
    </div>
  <% end %>
<% end %>
attr_accessible :name, :quantities_attributes, :quantities