2014-09-11 2 views
0

기존 자녀가있는 새로운 부모를 만드는 방법을 아는 사람이 있습니까?기존 자녀가있는 부모 만들기

class Order < ActiveRecord::Base 
    has_many :jobs 
    accepts_nested_attributes_for :jobs 
end 

class Job < ActiveRecord::Base 
    belongs_to :quote 
    belongs_to :order 
end 

중첩 된 변수로, 나는 그것이 새로운 아이들의와 함께 자동으로 새로운 부모를 생성하는 새로운 질서와 하나 개 이상의 작업 (어린이) (부모)와 만드는 방법을 구축 할 수 있습니다. 내가 가지고있는 것은 기존 자녀 그룹 (견적에 작성된 작업)이며 새로운 상위 양식에 포함하고자합니다. 새 주문을 만들기 위해 제출을 누르면 새 부모를 만들고 선택한 자식을 새 부모 ID로 업데이트하려고합니다.

나는 새로운 order_id를 가진 새로운 작업 (children)을 각각 저장하고 새로운 order_id를 저장함으로써 create 메소드에서 이것을 수행하는 지저분한 코드를 가지고있다. 그러나 이것을 자동적으로 수행 할 방법이 있는가?


실제 코드는 복잡하므로 여기에 그 핵심이 있습니다.

여러 작업에서 따옴표가 있다고 가정하면 모든 작업의 ​​quote_id 변수는 이러한 작업의 quote 및 @ 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 $> 

다음 주문 그들은 자동으로 주문하십시오 order.id 아마도 다른 매개 변수의 부부와 함께 생성에 업데이트 할 수 있도록 컨트롤러

작업 매개 변수입니다 내가 선호
def create 
    ... 
    if @order.save 
    Quote.find(params[quote_id]).jobs.each do |job| 
     job.update(order_id: @order.id) 
    end 
    end 
    ... 

는 형태로 중첩 된 객체로 취급한다. 나는

@order = Order.new 
@quote.jobs.each do |job| 
    @order.jobs << job 
end 

(컨트롤러에서) 시도했다 그러나 그들은 보통 중첩 된 형식의 형태로 표시되지 것 그리고 그 일을하면 실제로 업데이트 될 경우, 모르겠어요.

+0

UI 또는 관련 코드에서이 새 주문 개체와 연결할 기존 작업 개체를로드하는 방법/데이터를 앱에 제출하는 방법 (양식의 게시/만들기 호출을 통해) 귀하의 웹 UI 등)? 제게, 당신의 코드가 어떻게 연관시킬 데이터를 받는지 모르는 것은 잠재적 솔루션을 제공하기가 더 어렵습니다. –

+0

보기 코드를 게시하여 실제로 거기에서 무엇을하고 있는지 확인할 수 있습니까? – Surya

답변

0

주문이 한 작업에 대해 중첩 된 특성을 허용하기 때문에 주문 양식을 작성할 때 중첩 작업 필드를 숨겨진 필드로 수동으로 만들고 채울 수 있다고 가정합니다.

<% @quote.jobs.each_with_index do |job, index| %> 
    <input type='hidden' name='order[jobs_attributes][<% index %>][FIELDNAME]' id='order_jobs_attributes_<% index %>_FIELDNAME' value='<% job.something %>' /> 
<% end %> 

내가 깨끗한 방법은 숨겨진 필드를 구축 할 = f.input를 사용하는 simple_form/폼 헬퍼와 함께있을거야하지만 난 틀림없이 위의 게으름했다!

+0

사실, 나는 착각했다. 위의 내 게시물에서 마지막 섹션을 사용하여 @ order.jobs << job은 양식에서 인식되며 일반적인 중첩 된 양식은 사용자가 제안하는 것만을 생성합니다.문제는 create 메서드가 처리하지 못해서 나에게 준다는 것입니다 : OrdersController # create ActiveRecord :: RecordNotFound ID가 392 인 TranslationJob을 ID = 392로 찾을 수 없습니다. – mpipkorn

관련 문제