Rails3 / ActiveRecord:选择带参数的和?

时间:2011-04-24 12:42:52

标签: sql ruby-on-rails-3 activerecord

在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还是partner_id。不幸的是,Rails抱怨因为select没有采用第二个参数替换像where一样。有没有办法实现我想要的而不运行两个查询,一个用于user_id,一个用于partner_id?

1 个答案:

答案 0 :(得分:-1)

一个人可能会如此盲目......而不是:

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').

没有人回答,这是档案:)

编辑:对不起,请注意:如下所述,这很容易受到攻击。