[英]pg_search across multiple models in rails?
我正在尝试使用pg_search在两个模型之间进行搜索。 我有一个“雇用”模型,其中有两列“ child_id”和“ book_id”。 我想索引与“儿童”模型中的child_id相关联的儿童名称。
我的模型如下所示:
招聘
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_forename
方法之前multisearchable
:
class Movie < ActiveRecord::Base
belongs_to :director
def director_name
director.name
end
multisearchable against: [:name, :director_name]
...
让我知道它是否有效。 似乎我前段时间尝试过的测试工作正常。
我在pg搜索时遇到了一些问题。 所以我只是做了我自己的。 看看这个。
您在child_forename前面缺少一个冒号。
您需要传递符号:
multisearchable :against => [:child_id, :child_forename]
给定的错误告诉您未定义方法“ child_forename”。 这是因为ruby解释器自上而下读取文件,并且此时尚未定义该方法。 但是如果是这样,该行将评估为
multisearchable :against => [:child_id, "Mary"]
这可能不是您想要的。 如果正确传递了符号,则在实例化对象并为对象内容建立索引时,稍后将在on_update回调中调用具有该名称的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.