Ruby on rails 使用meta_搜索遍历模型并引用虚拟属性

Ruby on rails 使用meta_搜索遍历模型并引用虚拟属性,ruby-on-rails,activerecord,meta-search,Ruby On Rails,Activerecord,Meta Search,我试图将meta_搜索应用到一个表单中,在所有属性中,一个是按作者姓名进行的搜索。它作为两个属性“first_name”和“last_name”存储在表authors中。 我在作者模型中创建了以下虚拟属性: search_methods :name def name self.first_name + " " + self.last_name end 作者和图书模型(我正在其中搜索)的关联如下: class Book < ActiveRecord::Base

我试图将meta_搜索应用到一个表单中,在所有属性中,一个是按作者姓名进行的搜索。它作为两个属性“first_name”和“last_name”存储在表authors中。 我在作者模型中创建了以下虚拟属性:

  search_methods :name

  def name 
    self.first_name + " " + self.last_name
  end
作者和图书模型(我正在其中搜索)的关联如下:

class Book < ActiveRecord::Base
  has_many :authors
..

class Author < ActiveRecord::Base
  belongs_to :book
..
classbook
现在,当我尝试在视图中粘贴以下输入时,我得到了错误:

<%= f.text_field :authors_name_contains, :placeholder => "author.." %>
“作者…”%>
但是,如果我通过视图中的“or”操作符将条件应用于属性“first_name”和“last_name”,它就会起作用


我做错了什么?如何让元搜索使用方法“name”?

我认为你做不到。如果我正确理解meta_搜索,它会查看由ActiveRecord生成的属性(或者您的后端是什么),所以它不会知道任何关于您的虚拟属性的信息

据文档中所述,使用范围似乎可以做到这一点:但我无法让它工作。这里还建议使用作用域(不过对于searchlogic):我目前使用的是:`“author..”%>而视图中的作用域似乎很庞大。也许您需要在您的模型上创建一个名为authors\u name\u contains的作用域?