Is there any way to access the join model of a “has_many, :through =>” association that is created on “.build”?
I’m sorry that I don’t have the actual code here, but I hope you understand what I want 😉
a:
has_many :bs
has_many :cs, :through => :bs
b and c are defined correctly (w/ belongs_to, has_many, has_many-through)
Now: In a controller I’m trying to do a
var = @a.cs.build
(within a transaction, but I don’t think that’s relevant here),which “creates” a c-instance and also the joining b. But how can I access the automatically created b, as I’d like to pass some attributes? Is that possible at all, or do I have to work around with
@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!
or sth like that? I don’t think that’s very good style, nor does it ‘break’ the wrapping transaction for some reason
I rly hope that you get what I want.
EDIT
Umh, first of all: thanks for your answers, but I’m still stuck.
I’ll try to be more precise:
@a = A.new
@a.name = "foo"
varc = @a.cs.build
varc.name = "bar"
@a.save!
That’s gonna give me one instance of A,B and C. How can I set an attribute for B?
sth. like:
varb = join_model_of(@a, varc)
varb.name = "foobar"
before the @a.save!
TYIA!
Solution:
[ BUT:
(haven’t spent much thinking on the “why”)
My class B does include:
I can’t get past the first (of the above) validation. I have to comment it out, yet it gets written into the DB (correctly). ]
At least this works. Yet I’m not 100% sure if this is the way you should do it. Pls Cmt!