2011-06-13 2 views
2

나는 다음과 같은 모델이 있습니다도움 3

class Address < ActiveRecord::Base 
    validates_presence_of :street, postal_code 
end 

class Person < ActiveRecord::Base 
    belongs_to :address 
    belongs_to :work_address, :class_name => 'Address' 

    accepts_nested_attributes_for :address, :work_address 

    def initialize(params={}) 
    params[:address] = Address.new 
    params[:work_address] = Address.new 
    super 
    end 
end 

인격 만들려고 :

person = { 
    "address_attributes" => {:street => "foo", :postal_code => "45632-963"} 
    "work_address_attributes" => {:street => "bar", :postal_code => "45632-964"} 
} 
Person.create(person) 

내가 주소 필드을 가진 사람 객체가 작성되었다가,하지만 work_adress 필드를 비어 있습니다. 내보기에서

p.work_address_attributes = {:street => "bar", :postal_code => "45632-964"} 

을, 나는 다음과 같은 코드가 있습니다 :

<%= form_for(@person) do |form| %> 
... 
<%= form.fields_for :address do |address| %> 
    <%= address.text_field :street %> 
    <%= address.text_field :postal_code %> 
<% end %> 

<%= form.fields_for :work_address do |work_address| %> 
    <%= work_address.text_field :street %> 
    <%= work_address.text_field :postal_code %> 
<% end %> 

<%= form.submit %> 
<% end %> 

잘못 무엇입니까 내가하려고 할 때, 그것은 작동?

답변

0

params[:work_address]을 새 주소 개체로 설정하는 초기화 함수의 줄을 주석 처리 해 보았습니까? 중첩 된 속성을 사용하는 경우 설정하지 않아도됩니다. 당신이 정말로 그 두 줄이 필요하면, 나는 이런 식으로 변경합니다 :

params[:work_address] = Address.new if params[:work_address_attributes].nil? 

accepts_nested_attributes_for 당신을 위해 그 논리를 처리해야합니다. 주소 개체가 해시에서 전달하는 내용을 무시하고있을 가능성이 있습니까?

+0

아니요. 내 주소 개체가 아무 것도 무시하지 않습니다. 솔루션 제안 괜찮아요. 나는 테스트했고, 생성자에서이 코드가 전혀 필요 없다고 결론 지었다. 그러나 제거 할 때'form.fields_for : address' 뷰 코드는 아무것도 렌더링하지 않습니다. 이 모든 솔루션? –

+0

수정 사항에 질문에보기 코드를 추가 할 수 있습니까? –