Как мне создать пользовательские "методы ассоциации" в Rails 3? - PullRequest
2 голосов
/ 07 марта 2011

Я прочитал эту статью, , но это для 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, как правильно это сделать?

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

В Rails 3 часто используются не методы find, а области видимости, которые задерживают фактический вызов базы данных до тех пор, пока вы не начнете перебирать коллекцию.

Гадание на вашем первом примересделать:

в классе Reply ...

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

и затем использовать его:

 spammy_messages = user.replies.spaminess(:very)

или использовать его в представлении

spammy_messages.each do |reply|
   ....
end
2 голосов
/ 07 марта 2011

Я думаю, что нашел это!

Если вы ищете "расширения связей" на странице API Rails для ActiveRecord :: Assications , вы увидите, что это синтаксис (скопированныйпо этой ссылке):

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
...