2011-07-21 8 views
1

".build"で作成された "has_many、:through =>"の結合モデルにアクセスする方法はありますか?
私はここに実際のコードを持っていないことを申し訳ありませんが、私はあなたが私が欲しいものを理解してほしいと、b及びcは、W/belongs_toの(正しく定義にhas_many、has_manyのスルーされている).buildのjoin-modelへのアクセスhas_many、:〜

a: 
has_many :bs 
has_many :cs, :through => :bs 

今すぐ)
:C-インスタンス「を作成」とも参加)私は、トランザクション内(

var = @a.cs.build 

をやろうとしているが、私はそれはここでは関係ないと思うのコントローラでは、 b。しかし、私はいくつかの属性を渡したいので、自動的に作成されたbにはどうすればアクセスできますか?それはまったく可能なのか、それとも回避する必要がありますか

@a.create_c 
# or 
varb = B.new 
varb.someattr1 = "foo" # <- this is what I want w/ .build 
varb.someattr2 = "bar" 
varb.a = @a 
varc = C.new 
varc.someattr3 = "asdf" 
varb.c = varc 
# ... and some .save! 

またはsthですか?私はそれが非常に良いスタイルだとは思わないし、何らかの理由でラッピング取引を「中断」しない。
私が望むものを得ることを望む。


EDIT

Umh、すべての最初:あなたの答えのおかげで、私はまだこだわっています。私は、より正確にしようとするでしょう :

@a = A.new 
@a.name = "foo" 
varc = @a.cs.build 
varc.name = "bar" 
@a.save! 

つもり私がBの属性を設定することができますどのようにA、BおよびCでの1つのインスタンスを与えることだと?
sth。 like:

varb = join_model_of(@a, varc) 
varb.name = "foobar" 

@ a.save!

TYIA!

答えて

0

ソリューション:

varb = @a.bs.build 
varc = varb.build_c 
varb.someattr1 = "foo" 
varb.someattr2 = "bar" 
varc.someattr3 = "sadf" 
@a.save! 

[BUT: ( "なぜ" に多くの思考を費やしていない) 私のクラスBが含まれてい:

validates_presence_of :a # <- problem! 
validates_presence_of :c 

を私は過去を取得することはできません最初の(上記の)検証。私はそれをコメントアウトする必要がありますが、それはDBに書き込まれます(正しく)。 ]

少なくともこれは機能します。しかし、これがあなたがそれをやるべきであるなら、私は100%確信していません。 Pls Cmt!

0

あなたは

var = @a.cs.build 

を行うと、それは実際にあなたにbsオブジェクトを提供しますので、あなたがVARを使用してbsオブジェクトの属性にアクセスすることができます。
あなた自身で試すことができます。

0

私は少しあなたの質問について困惑しているが、私はModel01、JoinModelとModel02与えられたあなたは、このようなアクセサを持っている必要があることを知っていますか:

model1.model2s 
model1.model2_ids 
model1.join_models 
model1.join_model_ids 

最後の二つは、私がを考える何を与えることあなたが求めているのは...私が間違っていると、私のような馬鹿が理解できるように説明することができますか?

ありがとうございました!

関連する問題