1

transaction.rbモデル:

class Transaction < ActiveRecord::Base
  attr_accessible :customer, :tickets_attributes
  has_many :tickets
  accepts_nested_attributes_for :tickets
end

ticket.rbモデル:

class Ticket < ActiveRecord::Base
  attr_accessible :booking_id, :quantity, :transaction_id
  belongs_to :transaction
  belongs_to :booking
end

ビューページには、次の複数のエントリ用に入れ子になったレールフォームがありますticket

<%= 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 %>

フォームを送信すると、次のエラーが表示されます。

ActiveModel::MassAssignmentSecurity::Error in TransactionsController#create
Can't mass-assign protected attributes: ticket

モデルにattr_accessible :tickets_attributesとがありますがaccepts_nested_attributes_for :ticketstransactionまだエラーがあります。また、オンラインでチケットに複数を追加する<%= f.fields_for :ticket do |t| %>と、quantityフィールドが表示されません。

4

2 に答える 2

1

完全な再編集 - 申し訳ありませんが、記憶をリフレッシュする必要がありました。

transaction.rb tickets_attributesは問題ありません。

class Transaction < ActiveRecord::Base
    attr_accessible :customer, :tickets_attributes
    has_many :tickets
    accepts_nested_attributes_for :tickets
 end

transaction_controller.rb でチケットを作成する必要があります。

def new
    @transaction = Transaction.new
    @transaction.tickets.build
end

new.rb またはあなたのフォームでは、指摘されているように robでfields_forある必要があります::tickets

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

  ...

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

buildコントローラーの部分が欠けている可能性があると思います。それが役立つことを願っています!

于 2013-04-11T04:05:21.867 に答える