Using Factory Girl with has many relationship

Hello,

I have this kind of relation:

class Article < ActiveRecord::Base
has_many :comments
end

class Comment < ActiveRecord::Base
belongs_to :article
attr_protected :article_id
end

The default scenario inside controllers looks like:

@article = Article.create(:title => “foobar”)
@comment = @article.comments.create(:content => “w00t”)

I had tried to write those factories:

Factory.define :article do |f|
f.title “Hello, world”
end

Factory.define :comment do |f|
f.content “Awesome!”
f.association :article
end

But my syntax is not correct about the association. It’s a little bit
tricky because of the comment’s article_id protected attribute. So I
think this should be better if I declare the association inside the
article factory, but I don’t see how to process.

Thanks for any help.

On Fri, Sep 3, 2010 at 6:07 AM, Satsou Sa [email protected] wrote:

I had tried to write those factories:

Factory.define :article do |f|
f.title “Hello, world”
end

Factory.define :comment do |f|
f.content “Awesome!”
f.association :article
end

I’m still pretty newb, so I could be way off here, but I think you
need to define the factory that represents the association?

Factory.define :comment do |f|
f.content “Awesome!”
f.association :article, :factory => :article
end

On Fri, Sep 3, 2010 at 8:38 AM, Rick R [email protected] wrote:

f.association :article
end

I’m still pretty newb, so I could be way off here, but I think you
need to define the factory that represents the association?

Factory.define :comment do |f|
f.content “Awesome!”
f.association :article, :factory => :article
end

It’s also a bit confusing because your naming your factories the same
as the property name. It might be more clear if you set them with more
‘real’ names like

Factory.define :hello_world_article, :class => Article do |f|
f.title “Hello, world”
end

Factory.define :awesome_comment, :class => Comment do |f|
f.content “Awesome!”
f.association :article, :factory => :hello_world_article
end


Rick R

Many thanks for your help. Very appreciated.

Happy RoR3 developments!

Try this

Factory.define :article do |f|
f.title “Hello, world”
f.comments {|comments| [comments.association(::comment)]}
end

Factory.define :comment do |f|
f.content “Awesome!”
end