2011-07-28 5 views
0

私はhas_manyの親を持つUserモデルを持っています。 私はそのユーザーモデルに父親と母親を1つずつ欲しいと思っています。ユーザーhas_many with has_one's

belongs_toの

だから私のクラスの親現在、私はこの問題は私のコントローラである

class User < ActiveRecord::Base 
    has_many :parents 

    has_one :father, :class_name => 'Parent', :foreign_key => 'user_id', :conditions => {:type => 'male'} 
    has_one :mother, :class_name => 'Parent', :foreign_key => 'user_id', :conditions => {:type => 'female'} 
end 

class Parent < ActiveRecord::Base 
    belongs_to :user 
end 

を持っています。

編集に入ると、2つの親をデータベースに作成し、フォームに何も変更しなくてもスローします。たとえば、ユーザーの編集をクリックすると、編集ページに移動します。データベースを調べると、すでに作成されています。

私のフォームはそうのようになります。

= form_for @user do |f| 
    = f.fields_for :father do |father_form| 
    etc... 
    = f.fields_for :mother do |mother_form| 
    etc... 

私は一人で私のコントローラでは、この行に何かを試してみた:

... 
@user.parents.build(:type => 'male') 
@user.parents.build(:type => 'female') 
... 

をしかし、フォームは表示されません。

ご協力いただければ幸いです。

+0

なぜユーザーは多くの親を持っていますが、それらを単一の母親と父親に制限されていますか?他のどのような種類の親があなたに期待しているのですか?たぶんあなたは、物事を単純化し始めるhas_many:parentsを持っていなくてもかまいません。 – MrDanA

+0

私が到達しようとしているモデルを描くだけです。 – nbucciarelli

答えて

3

は、あなたの行動に

@user.build_father(:type => 'male') 
@user.build_mother(:type => 'female') 

代わり

@user.mother = Parent.new(:type => 'female') 
@user.father = Parent.new(:type => 'male') 

の使用してみてください

+0

これは機能しました。両親のデータ要素に値が入力されていない限り、データベースに入ることを防ぐ方法はありますか? – nbucciarelli

+1

はい、 'accepts_nested_attributes_for:father'と' accepts_nested_attributes_for:mother'にオプション:reject_ifを指定することでそれを行うことができます。ここでマニュアルを確認してください:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#method-i-accepts_nested_attributes_for – Hck

+0

素晴らしいです。どうもありがとうございます! – nbucciarelli