2013-02-08 4 views
1

У меня возникли проблемы с некоторым кодом внутри приложения, над которым я работаю.
С помощью следующего кода:
Rails - неправильное количество аргументов (2 для 0..1) error

@herbivores=Deer.find(:all,:conditions =>['state like?', '%' + params[:number]+'%']) 
@[email protected](:all,:conditions =>['city like?', '%bad%']) 

Я получаю сообщение об ошибке:

wrong number of arguments (2 for 0..1) 

Может кто-нибудь объяснить, что происходит?

ответ

3

Используйте API запрос, чтобы сохранить правильный масштаб, а также сделать это более аккуратно, так как where является цепной:

@herbivores=Deer.where('state like ?', '%' + params[:number]+'%') 
@[email protected]('city like ?', '%bad%') 

Вы можете также цепь эти непосредственно без промежуточной переменной:

@herbi = Deer.where('state like ?', "%#{params[:number]}%").where('city like ?', "%bad%") 

Или вы можете объединить их в один вызов метода:

@herbi = Deer.where('state like ? AND city like ?', "%#{params[:number]}%", "%bad%") 
+0

Вы также можете объединить эти вызовы: '@herbivores = Deer.where ('state like?', '%' + Params [: number] + '%'). Where ('city like ? ','% bad% ') ' –

+0

@ DanielVandersluis: вы могли бы, но это привело бы к другому результату, чем казалось бы, казалось бы, OP. Я добавлю это как дополнительный момент, спасибо. – PinnyM

+0

Мне это нравится, спасибо, будет использовать это – 2013-02-08 15:50:12

0

Я верю, что вы относитесь к @herbivores как к своей модели, которую вы можете найти, но это массив записей оленей, поэтому это не модель.

EDIT: Purhaps вы хотите:

@herbivores=Deer.find(:all,:conditions =>['state like ?', "%#{params[:number]}%"]) 
@herbivores.each do |herbi| 
    if herbi.city == 'bad' 
    puts "bad city in state #{ani.state}" 
    end 
end 
+0

просто скопировал это и, кажется, работает хорошо, очень благодарен – 2013-02-08 15:42:51

+1

Этот подход работает, но призовет к базе данных много раз больше, чем необходимо. Это также довольно многословно ... – PinnyM

+0

@PinnyM Я предпочитаю ваш метод, но только для своих собственных знаний. Я не прав, говоря, что он будет вызывать только базу данных один раз, но будет иметь больший результирующий набор, чем ваш, поскольку он является менее определенным запросом (и быть более тяжелым запросом)? –