so I am loading 100 posts, and know I will need post.author.name, is
there a way to eager load just authors.name rather than all of
authors’ fields? thx
On Jan 3, 9:41 am, rubynuby [email protected] wrote:
so I am loading 100 posts, and know I will need post.author.name, is
there a way to eager load just authors.name rather than all of
authors’ fields? thx
You can always use find_by_sql to load just what you want.
Something like:
Posts.find_by_sql(“select posts.*, author.name as author_name from
posts join authors on post.author_id = author.id”)
The Post records that are returned will have an @author_name
attribute.
In general, I think find_by_sql should be avoided, as ActiveRecord
should be used. But when there’s a performance issue, you do what you
have to do.
///ark
On 3 Jan 2008, at 19:37, Mark W. wrote:
Posts.find_by_sql(“select posts.*, author.name as author_name from
posts join authors on post.author_id = author.id”)
The Post records that are returned will have an @author_name
attribute.
You can do the same without find by sql : Post.find :all, :joins
=> :author, :select => ‘posts.*, authors.name as author_name’
Fred
rubynuby wrote:
so I am loading 100 posts, and know I will need post.author.name, is
there a way to eager load just authors.name rather than all of
authors’ fields? thx
As Mark and Fred have pointed out, this can be done with a join and
a custom select.
However in other cases where you wish to preserve the object hierarchy,
and also ensure fields are converted to the correct Ruby type, you can
try this plugin/monkey-patch:
http://dev.rubyonrails.org/attachment/ticket/7147/init.5.rb
Using this you would write:
Posts.find(:all, :conditions => ‘…’, :include => :author[:name])
–
We develop, watch us RoR, in numbers too big to ignore.