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回调中被调用。
我正在尝试使用 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回调中被调用。