Using Factory Girl with has many relationship

34 views
Skip to first unread message

Satsou Sa

unread,
Sep 3, 2010, 6:07:53 AM9/3/10
to rubyonra...@googlegroups.com
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.
--
Posted via http://www.ruby-forum.com/.

Rick R

unread,
Sep 3, 2010, 8:38:30 AM9/3/10
to rubyonra...@googlegroups.com
On Fri, Sep 3, 2010 at 6:07 AM, Satsou Sa <li...@ruby-forum.com> 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

Rick R

unread,
Sep 3, 2010, 8:41:45 AM9/3/10
to rubyonra...@googlegroups.com

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

Tony Primerano

unread,
Sep 3, 2010, 8:57:09 AM9/3/10
to Ruby on Rails: Talk
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

Satsou Sa

unread,
Sep 6, 2010, 3:09:40 AM9/6/10
to rubyonra...@googlegroups.com
Many thanks for your help. Very appreciated.

Happy RoR3 developments!

Reply all
Reply to author
Forward
0 new messages