【问题标题】:pg_search across multiple models in rails?跨导轨中的多个模型的pg_search?
【发布时间】:2016-01-18 21:17:00
【问题描述】:

我正在尝试使用 pg_search 来搜索两个模型。我有一个包含两列“child_id”和“book_id”的“Hires”模型。我想在 'Children' 模型中索引与 child_id 关联的子名称。

我的模型如下所示:

Hire.rb

class Hire < ActiveRecord::Base

  belongs_to :book
  belongs_to :child
  accepts_nested_attributes_for :book
  accepts_nested_attributes_for :child

  include PgSearch
  multisearchable :against => [:child_id, child_forename]

  def child_forename
    child.forename
  end

end

但是当我尝试构建索引时 (rake pg_search:multisearch:rebuild[Hires]) 我收到以下错误:

rake aborted!
NameError: undefined local variable or method `child_forename' for Hire (call 'Hire.connection' to establish a connection):Class
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.4/lib/active_record/dynamic_matchers.rb:26:in `method_missing'
/Users/James/Documents/websites/STAlibrary/app/models/hire.rb:12:in `<class:Hire>'
/Users/James/Documents/websites/STAlibrary/app/models/hire.rb:1:in `<top (required)>'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:457:in `load'

我如何构建这个查询来索引孩子的名字?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-4 pg-search


    【解决方案1】:

    您在 child_forename 前面缺少一个冒号。

    你需要传入符号:

    multisearchable :against => [:child_id, :child_forename]
    

    给定的错误告诉您方法“child_forename”未定义。那是因为 ruby​​ 解释器自上而下地读取文件,而此时方法尚未定义。但如果是,则该行将评估为

    multisearchable :against => [:child_id, "Mary"]
    

    这可能不是你想要的。如果您正确传递了符号,则稍后在实例化对象并索引对象内容时,会在某些 on_update 回调中调用具有该名称的方法。

    【讨论】:

      【解决方案2】:

      尝试在multisearchable 之前定义child_forename 方法:

      class Movie < ActiveRecord::Base
        belongs_to :director
      
        def director_name
          director.name
        end
      
        multisearchable against: [:name, :director_name]
      ...
      

      让我知道它是否有效。对于我前段时间尝试的测试,似乎工作正常。

      【讨论】:

      • :director_name 在您的示例中是一个符号,因此该方法不会立即在该行中调用。在这种情况下,顺序无关紧要。
      【解决方案3】:

      我在 pg 搜索方面遇到了一些问题。所以我只是自己做的。一探究竟。

      How To Create A Search Function - Ruby On Rails

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多