Как изменить поведение метода find для любого объекта? - PullRequest
0 голосов
/ 06 ноября 2010

Насколько я понимаю, метод find для любого объекта rails будет ожидать столбец 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  

Я хочу найти экземпляр модели userstat, используя user_id (мой внешний ключ к модели пользователя) и не используя уникальный по умолчаниюключ модели userstat.

Есть предложения?

Я использую Rails 3.0.1

Ответы [ 2 ]

3 голосов
/ 06 ноября 2010

Вы можете делать такие вещи, как

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

0 голосов
/ 06 ноября 2010

Для вашей проблемы:

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 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...