【问题标题】:checking if params exists in rails检查参数是否存在于rails中
【发布时间】:2012-06-04 05:32:21
【问题描述】:

这是我想做的:

我有这段代码:

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

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

【问题讨论】:

  • if (params[:id]) 检查参数id 是否存在。
  • 如果 params id 为空,你在 customercode 中使用 params[:id] 那么你会用什么来代替 params[:id] 作为临时代码?
  • @xdazz: params.has_key? :id 会更好,因为这正是你的意思。
  • @muistooshort if (params[:id]) 在大多数情况下还不够吗?
  • @xdazz:可能有人正在预处理params,所以nil 可能是params[:id] 的有效值。我认为最好准确地说出你的意思,而不是做出假设。

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


【解决方案1】:
customer   = Customer.find_by_siteid_and_customercode  params[:siteId], params[:id]
customer ||= Customer.find_by_siteid_and_temporarycode params[:siteId], params[:id]

使用查找器更安全、更清洁

【讨论】:

    【解决方案2】:

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

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

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

    coalesce(column1, column2)
    

    如果column1 不为NULL,则为您提供column1,如果column1 为NULL,则为column2


    如果您使用的是 Rails2,那么这样的东西应该可以工作:

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

    【讨论】:

    • @Sagiv:是的,但除非另有说明,否则这是一个非常安全的假设。
    • .where 在 rails 2 中不可用。所以我尝试了这个:
    • @AldrinDelaCruz:我添加了 Rails2 选项,您应该在问题中指出您正在使用 Rails2,因为它已经很老了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多