繁体   English   中英

pg_search在Rails的多个模型中?

[英]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搜索时遇到了一些问题。 所以我只是做了我自己的。 看看这个。

如何创建搜索功能-Ruby on Rails

您在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM