Как динамически создавать вложенные ресурсы с уникальными идентификаторами?

У меня есть вложенная форма с использованием Spree's line_item, Я прикрепил объект билета к spree_line_item, Когда я обновляю атрибуты, захватывается только фамилия, потому что динамически генерируемые идентификаторы ввода одинаковы.

РЕДАКТИРОВАТЬ: под фамилией я имею в виду последнюю запись. Таким образом, если есть 2 комбинации 'first_name' / 'last_name', захватывается только 2-я комбинация.

line_item_decorator.rb

Spree::LineItem.class_eval do
    has_many :tickets, dependent: :destroy
    accepts_nested_attributes_for :tickets
end

ticket.rb

class Ticket < ActiveRecord::Base
    belongs_to :line_item
end

permitted_attributes.rb

permitted_attributes.rb

    module Spree
      module PermittedAttributes
        ATTRIBUTES = [
          ...
          :taxonomy_attributes,
          :ticket_attributes,
          :user_attributes,
          :variant_attributes
        ]

        mattr_reader *ATTRIBUTES

        ...

        @@line_item_attributes = [:id, :variant_id, :quantity, :ticket_attributes]

        ...


        @@ticket_attributes = [:id, :line_item_id, :first_name, :last_name, :start_date, 
        :end_date, :time]

        ...
      end
    end

order_decorator.rb

Spree::Order.class_eval do
    remove_checkout_step :registration
    insert_checkout_step :tickets, :before => :address
end

tickets.html.erb

<table>
  <%= form_for :line_item do |line_item_form| %>
    <% @order.line_items.each do |line_item| %>

      For <%= line_item.start_date %>, provide the names for your <%= line_item.quantity %> <%= line_item.name %> <%= line_item.variant.option_values.first.presentation %> tickets:
      <% (1..line_item.quantity).each do %>
        <%= line_item_form.fields_for :tickets do |ticket_fields| %>
          <tr>
            <td class="line_item_ticket">
              <%= ticket_fields.label :first_name %>
              <%= ticket_fields.text_field :first_name %>
            </td>
            <td class="line_item_ticket">
              <%= ticket_fields.label :last_name %>
              <%= ticket_fields.text_field :last_name %>
            </td>
          </tr>
        <% end -%>
      <% end -%>
    <% end %>
  <% end %>
</table>

0 ответов

Другие вопросы по тегам