Сужение среднего до определенного - PullRequest
0 голосов
/ 13 марта 2011

Простой вопрос об использовании средних в Rails.Я просто пытаюсь рассчитать и усреднить для поднабора ставок в моей таблице те, которые относятся к одному элементу.

Bid.average(:amount, :conditions => ['item_id = ?', 'item_id'])

Я не могу понять, почему это приводит к следующему, с 'item_id', а не значение item_id, которое должно быть 5...

Parameters: {"id"=>"5"}
Item Load (0.1ms)  SELECT "items".* FROM "items" WHERE ("items"."id" = 5) LIMIT 1
Bid Load (0.5ms)  SELECT "bids".* FROM "bids" WHERE ("bids".item_id = 5) ORDER BY created_at DESC
Rendered bids/_bid.html.erb (6.6ms)
SQL (0.2ms)  SELECT AVG("bids"."amount") AS avg_id FROM "bids" WHERE (item_id = 'item_id')

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Потому что это то, что вы сказали делать :) Вы передаете строку 'item_id' в качестве второго элемента массива условий, и она ставится вместо знака вопроса.Если у вас есть переменная item_id, которая содержит идентификатор, вам не нужно помещать ее в кавычки:

Bid.average(:amount, :conditions => ['item_id = ?', item_id])
0 голосов
/ 13 марта 2011

Я думаю, что это должно быть так:

Bid.average(:amount, :conditions => ['item_id = ?', item_id])

item_id помещается туда как строка, отсюда и кавычки. Обязательно установите item_id в качестве переменной, например:

item_id = params[:item_id] #or whatever the params are
Bid.average(:amount, :conditions => ['item_id = ?', item_id])
...