2013-02-23 7 views
0

약 40 개의 양식 필드가있는 모델 사용자가 있습니다. 그런 다음 하위 모델에 속하는 양식의 필드가 3 개 있습니다. 그들은 : 나이, : 성별, : 집.accepts_nested_attributes_for를 사용하여 모델을 저장하는 방법은 무엇입니까?

나는 accepts_nested_attributes_for에 대한 설명서를 살펴본 결과 하위 모델을 데이터베이스에 저장하는 방법에 대해서는 약간 혼란 스럽습니다. 내 UsersController에서

나는 다음과 같습니다 게시물과 accepts_nested_attributes_for : 게시물

@user = User.new(params[:user]) 
... 
@user.save 

지금 레일 문서에 그들이 그 안에, 그 has_many 회원이라는 모델을 가지고. 그들은 다음과 같이 멤버 모델을 저장합니다 :

params = { :member => { 
    :name => 'joe', :posts_attributes => [ 
    { :title => 'Kari, the awesome Ruby documentation browser!' }, 
    { :title => 'The egalitarian assumption of the modern citizen' }, 
    { :title => '', :_destroy => '1' } # this will be ignored 
    ] 
}} 

member = Member.create(params['member']) 

그러나 params [: member]와 params [: user]가 이미 같습니다. My 3 Child fields, : age, : gender 및 : home은 params [: age], params [: gender] 및 params [: home]에 있습니다. 그래서 내 질문에 User 모델을 저장하고 자식 모델 내에 Child 필드 3 개를 저장하게하는 방법이 무엇인지 생각해보십시오.

답변

0

accepts_nested_attributes_for을 사용하려면 양식을 올바르게 설정해야합니다.

accepts_nested_attributes_for :child 

및 양식, 당신은이 작업을 수행 할 수 있습니다 :

당신의 User 모델에 따라서

, 당신은 할 수 있습니다

form_for @user do |f| 
    f.text_field :name #or whatever your user attributes 

    f.fields_for :child, @user.build_child do |child| 
    child.text_field :age 
    #etc 
    end 
end 

지금의 일환으로 child 객체를 구축해야 레일 user 개체를 사용하면 한 번에 userchild 개체를 만들 수 있습니다. 당신이 accepts_nested_attributes_for에 대한 child 또는 children을 넣어 여부

userchild 사이의 관계에 전적으로 의존한다. user이 단지 has_one :child 인 경우 위의 내용만으로 충분합니다. 그것은 has_many 관계가 있다면, 당신은 @user.build_child 또한

@user.children.build.에, 당신의 user 모델에 attr_accessible(child|children)_attributes을 추가하는 것을 잊지 않는다, 그렇지 않으면 당신은 할 수 없습니다 :children에 기호를 변경하고 변경해야합니다 양식 제출을 통해 대량 할당 할 수 있습니다.

+0

감사합니다. @Zajn. 그것은 많은 것을 설명합니다. 그러나 나는 내 질문에 중요한 부분을 빠뜨린 것 같다. 이 하위 필드는 사용자가 지정한 자녀 수에 따라 동적으로 생성됩니다. 그럼 내가이 자식 필드를 저장하겠습니까? @ user.children.build (나이 : params [: age1], 성별 : params [: gender1], 집 : params [: home1]) – mikeglaz

+0

예, 작동합니다. – mikeglaz

관련 문제