检查轨道中是否存在参数

时间:2012-06-04 05:32:21

标签: ruby-on-rails ruby activerecord ruby-on-rails-2

这就是我想做的事情:

我有这段代码:

customer = Customer.find(:first, :conditions => {:siteId => params[:siteId], :customerCode => params[:id]})

如果:customerCode为null,我想使用:temporaryCode。但我不知道怎么做。 提前致谢。

2 个答案:

答案 0 :(得分:1)

customer   = Customer.find_by_siteid_and_customercode  params[:siteId], params[:id]
customer ||= Customer.find_by_siteid_and_temporarycode params[:siteId], params[:id]
使用取景器是最安全,更清洁的

答案 1 :(得分:0)

我很确定你想在数据库中使用COALESCE:

customer = Customer.where(:siteId => params[:siteId])
                   .where('coalesce(customercode, temporarycode) = ?', params[:id])
                   .first

SQL COALESCE函数返回其非NULL的第一个参数。例如:

coalesce(column1, column2)
如果column1不为NULL,

将为您提供column1;如果column2为NULL,则为column1


如果您正在使用Rails2,那么这样的事情应该有效:

Customer.find(:first, :conditions => [
    'siteid = ? and coalesce(customercode, temporarycode) = ?',
    params[:siteId], params[:id]
])