¿Cómo creo “métodos de asociación” personalizados en Rails 3?

He leído este artículo, pero es para Rails 1.x.

Realmente me gustaría crear mis propios métodos de asociación:

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) 

En Rails 3, ¿cuál es la forma correcta de hacer esto?

La forma de hacer las cosas de Rails 3 a menudo es no usar métodos de búsqueda, sino más bien los ámbitos, lo que retrasa la llamada de la base de datos real hasta que comienza a iterar sobre la colección.

Adivinando tu primer ejemplo, yo haría:

en la clase Responder …

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

y luego usándolo:

  spammy_messages = user.replies.spaminess(:very) 

o para usarlo en una vista

 spammy_messages.each do |reply| .... end 

Creo que lo encontré!

Si busca “extensiones de asociación” en la página de la API de Rails para ActiveRecord :: Assications , verá que esta es la syntax (copiada de ese enlace):

 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