【问题标题】:Array conditions placeholder substitution problem (Rails3 Active Record)数组条件占位符替换问题(Rails3 Active Record)
【发布时间】:2011-10-09 01:58:51
【问题描述】:

谁能告诉我为什么这段代码不起作用:

scope :scope_a, lambda {|x, y| select('DISTINCT ?', x).order('? ASC', y)}

(说 ArgumentError:参数数量错误(2 比 1)),而这个

scope :scope_b, lambda {|x, y| where(:cond1 => x).where(:cond2 => y)}

完美运行?

如何使用第一个示例这样的条件构建适当的范围(当看似不可能使用哈希条件时)?

UPD 安全的解决方案被证明是微不足道的:

scope :myscope, lambda{|field, mode| {:select => field, :conditions => {:moderated => mode}, :order => field}}

..但是在未来的 RoR 版本中,这种设置范围条件的方式不会被弃用(不确定)吗?

【问题讨论】:

    标签: ruby-on-rails-3 activerecord


    【解决方案1】:

    您采用的方法仅适用于where(...) 方法,不适用于select(...)(这是引发错误的原因)或order(...)

    您可能想要这样做(因为order 子句默认为升序,您可以直接传入y):

    scope :scope_a, lambda {|x, y| select("DISTINCT #{x}").order(y)}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      相关资源
      最近更新 更多