Определить пользовательский метод поиска в отношении ActiveRecord? - PullRequest
5 голосов
/ 14 августа 2011

Foo has_many Bar. Я хочу сделать что-то вроде:

foo_instance.bars.find_with_custom_stuff(baz)

Как определить find_with_custom_stuff, чтобы он был доступен для отношения bars? (а не просто метод класса Bar?)

обновление

Я хочу сделать что-то более сложное, чем прицел. что-то вроде:

def find_with_custom_stuff(thing)
  if relation.find_by_pineapple(thing)
    relation.find_by_pineapple(thing).monkey
  else
    :banana
  end
end

1 Ответ

5 голосов
/ 14 августа 2011

Области применения, scope в рельсах 3 и named_scope в рельсах 2.

class Bar
  scope :custom_find, lambda {|baz| where(:whatever => baz) }
end

foo_instance.bars.custom_find(baz)

scope должен возвращать область видимости, поэтому, учитывая ваше обновление, вы, вероятно, не хотите использовать scope здесь. Вы можете написать метод класса и использовать scoped для доступа к текущей области, например:

class Bar
  def self.custom_find(thing)
    if bar = scoped.find_by_pineapple(thing)
      bar.monkey
    else
      :banana
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...