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

时间:2011-03-06 21:06:37

标签: ruby-on-rails ruby-on-rails-3 associations

我已阅读this article,,但它适用于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中,这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

我想我找到了它!

如果您在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

答案 1 :(得分:2)

Rails 3的处理方式通常是不使用find方法,而是使用范围,这会延迟实际的数据库调用,直到你开始迭代集合。

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

在课程回复中......

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

然后使用它:

 spammy_messages = user.replies.spaminess(:very)

或在视图中使用

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