如何在Rails 3中创建自定义“关联方法”?

我读过这篇文章,但它适用于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 3的处理方式通常不使用find方法,而是使用范围,这会延迟实际的数据库调用,直到您开始迭代集合。

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

在课堂回复…

  scope :spaminess, lambda {|s| where(:likelyhood => s) } 

然后使用它:

  spammy_messages = user.replies.spaminess(:very) 

或者在视图中使用它

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

我想我找到了!

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

 class Account < ActiveRecord::Base has_many :people do def find_or_create_by_name(name) first_name, last_name = name.split(" ", 2) find_or_create_by_first_name_and_last_name(first_name, last_name) end end end