2017-12-25 16 views
1

으로 특정 인스턴스에 액세스하는 방법은 항상 정확히 두 개의 주소를 가진 주문을 보유하고 있습니다. 보기에는 두 가지 주소를 모두 입력 할 수있는 양식이 있습니다. 내 컨트롤러에서 인스턴스 @을 전달하고 두 하위 인스턴스 주소는입니다. 난 그냥 처음 @의 order.addresses에 액세스 할 수있는 방법을보기에서중첩 된 형태, • <em>송장 주소</em>과 <em>배송 주소</em> : 제대로 fields_for

def new 
    @order = Order.new(orderCreationDate: Time.now) 
    2.times{ @order.addresses.build } 
end 

, 다음 다른 장소에서 두 번째 @의 order.addresses :

내 OrdersConntroller에서 추출? 내가 지금까지 시도했습니다 무엇

:

<%= form_for @order do |f| %> 
... 
    <%= f.fields_for :addresses do |ff| %> 
    <%= ff.text_field :firstName %> 
    ... 
    <% end %> 
<% end %> 

그러나 그런 다음 HTML 결과는 다음 (여기서 이름과 ID가 옳지 않다)이다. 내 주문 모델

<input type="text" name="order[a][firstName]" id="order_a_firstName">  

추출 : 지원에 대한

has_many :addresses, foreign_key: "orderID" 
accepts_nested_attributes_for :addresses, allow_destroy: true 

들으.

답변

1

는 두 모델 1) InvoiceAddress를 작성해야하고

has_one :invoice_address 
has_one :shipping_address 

및 orders_controller.rb

def new 
    @order = Order.new(orderCreationDate: Time.now) 
    @invoice_address = @order.build_invoice_address 
    @shipping_address = @order.build_shipping_address 
end 

을 다음과 같이 2)

class InvoiceAddress < ActiveRecord::Base 
    self.table_name = :address 
end 

class ShippingAddress < ActiveRecord::Base 
    self.table_name = :address 
end 

주문 모델 사용 관련을 ShippingAddress 양식은

입니다.
<%= form_for @order do |f| %> 
    ... 
    <%= f.fields_for :invoice_address, @invoice_address do |ff| %> 
     <%= ff.text_field :firstName %> 
     ... 
    <% end %> 
    <%= f.fields_for :shipping_address, @shipping_address do |ff| %> 
     <%= ff.text_field :firstName %> 
     ... 
    <% end %> 
<% end %> 
+0

안녕하세요, Ganesh, 나는이 문제를 어떻게 해결할 수 있는지보고 있습니다. 하지만 주문을 저장하려고하면 주소 중 하나에 대한 유효성 검사가 실패합니다. 모든 유효성 검사가 통과되면 3 개의 인스턴스가 모두 저장되는지 확인하려면 어떻게해야합니까? 그렇지 않으면 롤백이 있어야합니다. – fydelio

+2

유효성 검사 또한 위의 방법을 사용하여 작동합니다. –