如何更改任何对象的'find'方法的行为?

时间:2010-11-06 04:25:31

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

我的理解是,任何rails对象的find方法都需要该对象的id列。但我想使用该表的另一列找到该表/对象的一行。我怎么做 ?

例如,我有userstats模型如下:

create_table "userstats", :force => true do |t|
  t.integer  "user_id"
  t.integer  "no_of_wts"
  t.integer  "no_of_wtb"
  t.integer  "wts_reputation"
  t.integer  "wtb_reputation"
  t.integer  "overall_reputation"
  t.datetime "created_at"
  t.datetime "updated_at"
end  

我想使用user_id(我的用户模型的外键)找到一个userstat模型的实例,而不是使用userstat模型的默认唯一键。

有什么建议吗?

我正在使用Rails 3.0.1

2 个答案:

答案 0 :(得分:3)

您可以执行

之类的操作
Person.find_by_user_name
Person.find_all_by_last_name

文档:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

有一个非常古老的Railscast ......不确定所有细节是否保持不变,但可以让你了解Railscast:http://railscasts.com/episodes/2-dynamic-find-by-methods

答案 1 :(得分:0)

对于你的问题:

UserStat.find_all_by_user_id(5)

find()的其他一些例子:

UserStat.find_all_by_wts_reputation_and_wtb_reputation(1,2)
UserStat.find(:all, :conditions => { :no_of_wtb=> 5 })