簡體   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