Есть ли в Rails 3 магия ассоциации find_by? - PullRequest
5 голосов
/ 26 января 2011

В частности, давайте предположим, что у нас есть две разумные модели:

  1. TieDyeCentipede, что has_many :legs
  2. Leg, которое имеет атрибут :color.

Будучи TieDyeCentipede, никакие две ноги никогда не будут одного цвета.Фактически, цвет конкретной ноги уникален среди всех ног всех наших TieDyeCentipedes.

. Исходя из этой уникальности, мы хотим найти конкретную Centipede поконкретный цвет ноги - скажем, :deep_sky_blue.

Я мог бы сделать что-то вроде:

critter = Leg.find_by_color(:deep_sky_blue).tie_dye_centipede

Однако есть ли метод find_by_* наTieDyeCentipede класс, который я тоже мог бы использовать?

Ответы [ 2 ]

6 голосов
/ 26 января 2011

Без магии:

TieDyeCentipede.joins(:legs).where(:legs => {:color => 'deep_sky_blue'}).first

Немного магии:

def self.find_by_leg_color(color)
  TieDyeCentipede.joins(:legs).where(:legs => {:color => color}).first
end
3 голосов
/ 26 января 2011

Попробуйте TieDyeCentipide.joins(:legs).where(:legs => {:color => :deep_sky_blue}).first

Для метода find_by_* или чего-то подобного, я бы порекомендовал Pacecar , который генерирует много полезных областей для ваших моделей AR.

...