Это был первоначальный вопрос, который я задал, но думаю, что ниже добавляет немного больше деталей к сценарию: оригинальный вопрос
Я хотел бы иметь форму, которая позволяет мне постепенно добавлять записи ассоциации к объекту, которые также должны создаваться при отправке формы.
Настройка модели (- <один ко многим) </p>
Клиент -
В моем контроллере у меня есть собственный маршрут:
def custom_order
puts "custom_order called"
@cakeTypes = CakeType.all
@cakes = Cake.all
@customer = Customer.new
@customer.customer_orders.build
end
Клиент может отправить только один заказ за раз, поэтому я создаю объект customer_orders. Я мог бы включить построителя в order_line_items, но это динамично и о чем мой вопрос.
У меня в форме ниже есть link_to, в котором есть add_to_order - это вызывает немного javascript, который отправляет ajax-запрос контроллеру, чтобы получить соответствующие детали для заказа после того, как пользователь выбирает из выпадающего списка продукт, количество и т. Д., Которые они хотят .
Собираюсь ли я в правильном направлении "Построения Построения" (как я его описываю) моих записей соединения для вложенной формы для объектов, которые я хотел бы, чтобы все были созданы одновременно? Как это сделать через «Rails way»?
Моя форма: добавлены html комментарии для дальнейшего описания того, что я пытаюсь сделать:
<%= form_with(model: customer, local: true, url: "/custom_order") do |form| %>
<!-- customer form fields, name, phone, email-->
<%= render 'customer_fields', f: form %>
<div class="field">
<%= form.fields_for :customer_orders do |builder| %>
<%= builder.label :date_needed %>
<%= builder.date_select :date_needed %>
<br />
<%= builder.label :comments %>
<%= builder.text_area :comments %>
<% end %>
</div>
<!-- order form -->
<div class="field">
<!-- We want to display to user the cake sizes available depending on the cake they select -->
<!-- the cake and size they select should inform the cake_price_id which is a hidden field -->
<!-- {'data-order-line-item-cake' => "#{line_item_builder.options[:child_index]}"} -->
<%= collection_select :order_line_item, :cake_id, Cake.order(:name), :id, :name %>
<%= grouped_collection_select :order_line_item, :cake_size_id, Cake.all, :cake_sizes, :name, :id, :name %>
<%= label_tag :quantity %>
<%= text_field_tag :quantity %>
<%= link_to "Add to order", {}, id: 'add_to_order', remote: true %> <!-- , method: :post, remote: true %> -->
<!-- A "customer" on this page will only every create one order -->
<!-- so each item should field should have -->
<!--customer[customer_orders_attributes][0][date_needed] -->
<!--customer[customer_orders_attributes][0][comments] -->
<!--customer[customer_orders_attributes][0][total] HIDDEN!-->
<div id="order-items">
<% if false %>
<%= text_field_tag "customer[customer_orders_attributes][0][order_line_items_attributes][1][customer_order_id]", "", disabled: true%>
<% end %>
<!-- <input type="text" name="customer[customer_orders_attributes][0][order_line_items_attributes][1][customer_order_id]" id="customer_customer_orders_attributes_0_order_line_items_attributes_1_customer_order_id" value="" disabled="disabled"> -->
<!-- names -->
<!--customer[customer_orders_attributes][0][order_line_items_attributes][0..N][customer_order_id] -->
<!--customer[customer_orders_attributes][0][order_line_items_attributes][0..N][cake_price_id] -->
<!--customer[customer_orders_attributes][0][order_line_items_attributes][0..N][quantity] -->
</div>
<div class="actions">
<%= submit_tag "Submit Order" %>
</div>
<% end %>
Мой кофейный код - В данный момент это немного хакерски, так как я все еще учусь и тоже пробую что-то сделать. Я хотел бы знать, правильно ли то, что я делаю до сих пор, и, если возможно, как мне динамически создавать записи соединения?
$ ->
$('#add_to_order').click ->
console.log("add to order!")
myData =
cake_id: $('#order_line_item_cake_id :selected').val()
cake_size_id: $('#order_line_item_cake_size_id :selected').val()
quantity: $('#quantity').val()
$.ajax
url: "/build_order_item"
type: 'GET'
dataType: 'json'
data: (myData)
success: (data) ->
console.log(data)
#$('#order-items').append("<h6>#{data.quantity} - #{data.size} of #{data.cake} - #{data.price}</h6>")
$('#order-items').append("<input type=\"hidden\" name=\"jims_cake_price_id\" id=\"jims_cake_price_id\" value=#{data.cake_price_id}><br />")
error: ->
alert "Something went wrong"