如何在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