Rails3 / ActiveRecord: выбрать сумму с параметрами? - PullRequest
1 голос
/ 24 апреля 2011

Дайте следующий (уже упрощенный) запрос в SQLite:

def self.calculate(year, month, user_id, partner_id)
  where(':user_id = entries.user_id OR :partner_id = entries.user_id', {    
      :user_id => user_id,
      :partner_id => partner_id
  }).
  where('entries.date <= :last_day', { 
      :last_day => Date.new(year, month, 1).at_end_of_month
  }).
  select('sum(case when joint = "f" and user_id = :user_id then amount_calc else 0 end) as sum_single' , {    
      :user_id => user_id 
  }).
  group("strftime('%Y-%m', date)")
end

Полный запрос содержит больше сумм с различным случаем, когда операторы, и некоторые из них зависят от того, является ли это user_id oder partner_id.К сожалению, Rails жалуется, что select не принимает второй параметр с подстановками, например, где.Есть ли способ достичь того, чего я хочу, без выполнения двух запросов, одного для user_id и одного для partner_id?

1 Ответ

0 голосов
/ 25 апреля 2011

Можно быть таким слепым .... вместо:

select('sum(case when joint = "f" and user_id = :user_id then amount_calc else 0 end) as sum_single' , {    
  :user_id => user_id 
}).

просто создайте строку:

select('sum(case when joint = "f" and user_id = ' + user_id.to_s + ' then amount_calc else 0 end) as sum_single').

Как никто не ответил, это для архивов:)

Редактировать: Извините, остерегайтесь этого: как отмечено ниже, это уязвимо.

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