【问题标题】:Rails : includes doesn't work in model scopeRails:包含在模型范围内不起作用
【发布时间】:2020-08-24 21:11:11
【问题描述】:

我在 book 模型中创建了一个范围,并希望包含 author 关系。不幸的是,关系没有加载以下代码:

scope :search, ->(title) {
    quoted_title = ActiveRecord::Base.connection.quote_string(title)
        includes(:author).where("title % :title", title: title).
      order(Arel.sql("similarity(title, '#{quoted_title}') DESC"))
  }

我尝试了一些调整,例如使用 joins(:author).merge() 但关系仍未加载。知道如何在范围内加载关系吗?谢谢。

这是我通过 Ajax 调用以呈现搜索结果的方法的控制器:

def search
   results_books = Book.search(search_params[:q]).first(5)
   results_authors = Author.search(search_params[:q]).first(5)

     results = results_books + results_authors

   render json: { results: results }, status: :ok
  end

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    对于您范围内的搜索功能,如果我理解正确,您正在尝试根据标题字段选择与搜索参数匹配的书籍。如果是这样,我可以建议像这样的较短版本:

     scope :search, lambda { |title|
        where('title like ?', "%#{title}%")
      }
    

    至于将相关作者包括在 json 输出中。我们通常在向前端返回 JSON 对象时使用 JBuilder。如果您坚持使用基本的 RoR,请查看 Substanstial https://stackoverflow.com/a/26800097/9972821 的这个答案

    这未经测试,所以请告诉我它的运行情况。我分享的帖子的其余部分也提到了 JBuilder 作为首选替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2015-03-10
      • 1970-01-01
      • 2021-02-17
      相关资源
      最近更新 更多