【问题标题】:Rails 3 update scope with conditions, include, and args to Rails 4Rails 3 使用条件、包含和参数将范围更新到 Rails 4
【发布时间】:2016-04-21 14:33:33
【问题描述】:

我正在将 Rails 3 代码库升级到 Rails 4,并且一直在更新以使用新的范围样式和查询界面。

我不确定如何切换使用 include 的作用域以及作用域 lambda 中的条件。

  scope :search_stuff, lambda { |search|
    search_conditions = Array.new(4, "%#{search}%")
    {
      :include => {:sponsor => [], :routing_form_pi_users => [:user], :item => []},
      :conditions => ["id like ? or title like ? or users.name like ? or sponsors.name like ?", *search_conditions]
    }
  }

【问题讨论】:

  • 你的问题是什么?你尝试了什么?它没有按预期工作吗?

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4


【解决方案1】:

当您比较不同版本的 Rails 指南中关于查询接口的文档时,您会发现用于预加载多个关联的接口并没有太大变化。

Rails 2.3.8 语法中的示例:

Category.find 1, :include => {:posts => [{:comments => :guest}, :tags]}

Rails 4.2 语法示例:

Category.includes(articles: [{ comments: :guest }, :tags]).find(1)

因此应该可以将旧的嵌套哈希复制到新语法中:

scope :search_stuff, lambda { |search|
  includes(item: [], routing_form_pi_users: [:user], sponsor: []).
    where('id like ? or title like ? or users.name like ? or sponsors.name like ?', *Array.new(4, "%#{search}%"))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多