Кто-нибудь знает, как создать нового родителя с существующими детьми?Создать родителя с существующими детьми
class Order < ActiveRecord::Base
has_many :jobs
accepts_nested_attributes_for :jobs
end
class Job < ActiveRecord::Base
belongs_to :quote
belongs_to :order
end
С вложенными переменными, я могу построить один или несколько рабочих мест (дети) с новым порядком (родитель) и метод создания автоматически создает новый родительский с его новыми детьми. Однако у меня есть группа существующих детей (задания, созданные в цитате), и я хочу включить их в новую родительскую форму. Когда вы нажимаете submit для создания нового заказа, я хочу, чтобы он создал нового родителя и обновил выбранные дочерние элементы с этим новым родительским идентификатором.
У меня грязный код, который будет делать это в методе создания, сохраняя новый порядок (родительский), а затем обновляя каждое задание (детей) с помощью нового order_id, но есть ли способ сделать это автоматически?
Фактический код является сложным, так что вот его суть.
Предположим, что есть цитата с несколькими заданиями, поэтому переменная quote_id во всех этих заданиях указывает на цитату и @ quote.jobs = массив этих заданий.
Вот что у меня теперь есть:
В модели заказа я добавил:
attr_accessor :quote_id
В контроллере заказа:
def new quote_id
@quote = Quote.find(quote_id)
@order = Order.new
и в представлении
<%= simple_form_for @order, :html => { :class => 'form-horizontal' } do |f| %>
<%= f.input :quote_id, value: @quote.id, as: :hidden %>
<%= f.input :account_number %>
...
<table>
<thead><tr> ... column headings here ... </tr></thead>
<tbody>
<% @quote.jobs.each do |q| %>
<tr>
<td><%= q.description %></td>
<td><%= q.price %></td>
</tr>
<% end %>
<tr><%= ... add a row with the total price ... %></tr>
</tbody>
</table>
<%= f.button :submit, "Place My Order" %>
<% end $>
Затем в заказе Контроллер
def create
...
if @order.save
Quote.find(params[quote_id]).jobs.each do |job|
job.update(order_id: @order.id)
end
end
...
То, что я предпочел бы это для рабочих параметров, которые будут обрабатываться как вложенные объекты в форме, чтобы они могли быть автоматически обновляться на заказ создать с order.id и, возможно, несколько других параметров. Я пытался (в контроллере)
@order = Order.new
@quote.jobs.each do |job|
@order.jobs << job
end
, но они не отображаются в форме с обычной гнездовой формате, и если это работает, я не знаю, будут ли они на самом деле будут обновлены.
В вашем пользовательском интерфейсе или соответствующем коде, как вы загружаете существующие объекты задания, которые будут связаны с этим новым объектом заказа/как вы отправляете данные в свое приложение (через сообщение/создать звонок из формы в ваш веб-сайт и т. д.)? Для меня не зная, как ваш код получает данные для связи, затрудняет предложение потенциального решения. –
можете ли вы опубликовать свой код просмотра, чтобы узнать, что вы на самом деле делаете там? – Surya