2011-03-06 73 views

回答

2

Rails的做事情的3路是通常不使用find方法,而是使用范围,这会延迟实际的数据库调用,直到您开始迭代集合。

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

类回复

...

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

,然后用它:

spammy_messages = user.replies.spaminess(:very) 

或在视图中使用它

spammy_messages.each do |reply| 
    .... 
end 
+0

+1如果范围*的规则需要从数据库中提取?例如,如果您必须拉取相关的模型并对其执行逻辑,该怎么办?所有这些都会延迟到结果迭代完成吗?我想我觉得这种逻辑属于模型,快速谷歌搜索显示Railscast似乎同意(http://asciicasts.com/episodes/215-advanced-queries-in-rails-3)。 – ClosureCowboy 2011-03-07 05:49:37

+0

范围在模型中,是的,它可以使用多个关系。 – DGM 2011-03-08 03:43:53

+0

我没有注意到你的评论。谢谢! – ClosureCowboy 2011-03-09 02:16:25

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 
+0

因为这正是rails1,它是不是wh让你觉得它不再工作了? – mcr 2011-09-15 17:14:46

相关问题