AR :: B # find ожидает переменное число аргументов, но last из них должно быть хэшем опций. Он использует Array#extract_options!
, и вы тоже можете:
def self.find_by_user_id(user_id, *args)
options = args.extract_options!
options.merge!(:joins => :case_map, :conditions =>
['case_maps.uer_id = ? and case_maps.case_id = cases.id', user_id])
self.find(:all, *args, options)
end
Но ты не должен. Какие возможные значения имеют смысл между полями: all и options?
Что вы действительно ищете:
def self.find_by_user_id(user_id, options)
self.find(:all, options.merge(:joins => :case_map, :conditions =>
['case_maps.user_id = ? and case_maps.case_id = cases.id', user_id]))
end
Или еще лучше:
named_scope :find_by_user_id, lambda{|user_id|
{
:joins => :case_map,
:conditions => ['case_maps.user_id = ? and case_maps.case_id = cases.id', user_id]
}
}
Именованная область действия гарантирует, что все ваши параметры будут аккуратно объединены (все ваши условия будут применены, даже если вы добавите больше позже). Затем вы можете позвонить с помощью:
Case.find_by_user_id(user_id).all(:limit => 15)
(Именованные области видимости - «Да Бом». Их следует использовать как можно больше. Даже в общем разговоре. Например, если вы были здесь в моем доме вчера вечером, вы, возможно, подслушали эту маленькую заметку: Вы хотите на ужин? »,« То же самое, что у меня есть каждую ночь, Именные области и чипсы ». Потому что я предан и все такое.)
Кроме того, в качестве дополнительного примечания, если предположить, что это относится к вашей модели Case, предложение "and case_maps.case_id = cases.id
" не нужно, :joins => :case_map
сделает это за вас.