Ruby on rails 3 Rails中嵌套形式的质量分配错误

Ruby on rails 3 Rails中嵌套形式的质量分配错误,ruby-on-rails-3,nested-forms,mass-assignment,Ruby On Rails 3,Nested Forms,Mass Assignment,transaction.rb型号: class Transaction < ActiveRecord::Base attr_accessible :customer, :tickets_attributes has_many :tickets accepts_nested_attributes_for :tickets end class Ticket < ActiveRecord::Base attr_accessible :booking_id, :quanti

transaction.rb
型号:

class Transaction < ActiveRecord::Base
  attr_accessible :customer, :tickets_attributes
  has_many :tickets
  accepts_nested_attributes_for :tickets
end
class Ticket < ActiveRecord::Base
  attr_accessible :booking_id, :quantity, :transaction_id
  belongs_to :transaction
  belongs_to :booking
end
在查看页面中,我有一个嵌套的rails表单,用于多个
票证条目

<%= form_for(@transaction) do |f| %>
  <%= f.text_field :customer %>

  <% @sezzion.bookings.each do |booking| %>
      <%= booking.bookingdate %>:

      <%= f.fields_for :ticket do |t| %>
         <%= t.text_field :quantity, :value => 0, :class => "quantity" %>
         <%= t.hidden_field :booking_id, :value => booking.id %>
      <% end %>

  <% end %>
  <%= f.submit "create transaction" %>
<% end %>

我在
事务
模型中有
attr\u accessible:tickets\u attributes
接受:tickets
的嵌套属性,但仍然存在错误。另外,当我在第
行的ticket中添加复数时,
数量
字段不会显示。

您的表单
f
基于一个
事务
对象,该
对象有许多:tickets
。我认为您应该在
字段中使用复数
:tickets
而不是单数
:ticket

  <%= f.fields_for :tickets do |t| %>

如果您总是想要一张新机票,您可能需要执行以下操作:

  <%= f.fields_for :tickets, Ticket.new do |t| %>

以确保显示创建表单。

完全重新编辑--很抱歉,有一段时间我不得不刷新我的记忆

transaction.rb
tickets\u属性
正常

class Transaction < ActiveRecord::Base
    attr_accessible :customer, :tickets_attributes
    has_many :tickets
    accepts_nested_attributes_for :tickets
 end
new.rb或在您的表单中,
字段必须用于
:tickets
,正如rob所指出的:

<%= form_for(@transaction) do |f| %>

  ...

  <%= f.fields_for :tickets do |t| %>
     ...

...
...

我认为您可能缺少控制器中的
构建
部分。希望有帮助

谢谢!现在使用
时,它给出了一个错误
ActiveModel::MassAssignmentSecurity::TransactionController中的错误#create无法批量分配受保护的属性:quantity
。我已经在
transaction
模型中有了
attr\u accessible:tickets\u属性。是的,我用复数
tickets
完成了这部分。使用
:ticket\u属性
但是,我有一个错误:
ActiveModel::MassaSignmentSecurity::TransactionController中的错误#创建无法批量分配受保护的属性:数量、tickets\u属性
我经常发现我忘记了构建新的嵌套属性。你完成内置控制器了吗?
def new
    @transaction = Transaction.new
    @transaction.tickets.build
end
<%= form_for(@transaction) do |f| %>

  ...

  <%= f.fields_for :tickets do |t| %>
     ...