Как получить доступ к аргументам named_scope из расширения именованных областей? - PullRequest
2 голосов
/ 19 мая 2009

следующий пример:

named_scope :search, lambda {|my_args| {...}} do
  def access_my_args
    p "#{my_args}"
  end
end

# Call:
Model.search(args).access_my_args

Как видите, я хочу получить доступ к аргументам из лямбды в расширении named_scope. Есть ли способ сделать это?

Более конкретный пример:

class User < ActiveRecord::Base
  named_scope :by_name, lambda {|name_from_scope| {:conditions => {:name => name_from_scope}}} do
    def change_name
     each { |i| i.update_attribute(:name, "#{name_from_scope}xyz") }
    end
  end
end

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

Ответы [ 2 ]

2 голосов
/ 28 мая 2009
named_scope :test_scope, lambda {|id| {:conditions => {:id => id}} } do
    def test_scope_method
      each {|i| puts @proxy_options.to_yaml}
    end
  end

Я не верю, что вы можете напрямую получить аргументы без расширения activerecord.

@ proxy_options даст вам скомпилированные опции в блоке. Итак, в вашем примере у вас не будет доступа к name_from_scope, но у вас будет доступ к @proxy_options [: условия] [: имя].

0 голосов
/ 19 мая 2009

Это то, что вы пытаетесь сделать?

named_scope :search, lambda {|*my_args|
    OtherClass.announce_search_for_model(my_args, self.class)
    { :conditions => ['created_at < ?', my_args[:created_at]], :limit => my_args[:limit] }
}

args = {:created_at > 'NOW()', :limit => 5}
Model.search(args)

Если вы хотите наблюдать за тем, что передается на named_scope, тогда я сделаю это в лямбде.

Результаты Named_scope всегда будут такими, как если бы вы использовали Model.find. Это функциональность рельсов, поэтому вам нужно переопределить функциональность рельсов с помощью модуля, если вы хотите что-то другое. Я бы не рекомендовал этого делать, потому что расширения named_scope существуют для упрощения поиска, а не для наблюдения за параметрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...