pg_search rails 中的多个模型?

pg_search across multiple models in rails?

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

我的模型是这样的:

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'

我如何构建此查询以索引 child 名字?

尝试在 multisearchable:

之前定义 child_forename 方法
class Movie < ActiveRecord::Base
  belongs_to :director

  def director_name
    director.name
  end

  multisearchable against: [:name, :director_name]
...

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

我在使用 pg 搜索时遇到了一些问题。所以我自己做了。看看这个。

How To Create A Search Function - Ruby On Rails

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

您需要传入符号:

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

给出的错误告诉您方法 "child_forename" 未定义。那是因为 ruby 解释器自上而下读取文件并且此时尚未定义该方法。但如果是,该行将计算为

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

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