Ruby on rails “我如何创建自定义”;“关联方法”;在Rails 3中?

Ruby on rails “我如何创建自定义”;“关联方法”;在Rails 3中?,ruby-on-rails,ruby-on-rails-3,associations,Ruby On Rails,Ruby On Rails 3,Associations,我读过,但它是Rails 1.x版的 我很想创建自己的关联方法: user = User.find(1) # Example of a normal association method user.replies.create(:body => 'very informative. plz check out my site.') # My association method user.replies.find_by_spamminess(:likelihood => :ver

我读过,但它是Rails 1.x版的

我很想创建自己的关联方法:

user = User.find(1)

# Example of a normal association method
user.replies.create(:body => 'very informative. plz check out my site.')

# My association method
user.replies.find_by_spamminess(:likelihood => :very)
在Rails 3中,正确的方法是什么?

我想我找到了

如果在Rails API页面中搜索“关联扩展”,您将看到以下语法(从该链接复制):

类帐户
Rails 3通常不使用find方法,而是使用scopes,这会延迟实际的数据库调用,直到您开始迭代集合

猜猜你的第一个例子,我会:

在课堂上回答

  scope :spaminess, lambda {|s| where(:likelyhood => s) }
然后使用它:

 spammy_messages = user.replies.spaminess(:very)
或者在视图中使用它

spammy_messages.each do |reply|
   ....
end

+1如果作用域的规则需要从数据库中提取,该怎么办?例如,如果必须提取关联的模型并对其执行逻辑,该怎么办?所有这些都会被推迟到结果被迭代吗?我想我觉得这种逻辑属于模型,快速谷歌搜索显示Railscast似乎同意()。范围在模型中,是的,它可以使用多种关系。我没有注意到你的评论。非常感谢。这就是rails1,是吗,是什么让你认为它不再工作了?
spammy_messages.each do |reply|
   ....
end