find_by association

mah*_*off 1 activerecord ruby-on-rails ruby-on-rails-3

在Rails中,我可以说:

Post.find_by_user_id 1
Run Code Online (Sandbox Code Playgroud)

但有没有办法说出类似的话

Post.find_by_user User.first
Run Code Online (Sandbox Code Playgroud)

没什么大不了的,但会更清洁.

Jes*_*ott 10

你可以翻到:

User.first.posts
Run Code Online (Sandbox Code Playgroud)

或者,在帖子上使用"范围"...所以你可以:

class Post < ActiveRecord::Base
  scope :for_user, lambda{|user| where(:user_id => user.id) }
end
Run Code Online (Sandbox Code Playgroud)

你会用:

user = User.first
Post.for_user(user)
Run Code Online (Sandbox Code Playgroud)