[英]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.