我已阅读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中,这样做的正确方法是什么?
答案 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