Ransack是否像MetaSearch一样在搜索中支持相同的polymorhpic belongs_to关联?

时间:2012-10-25 21:58:35

标签: ruby-on-rails polymorphic-associations meta-search ransack

我正在从MetaSearch gem迁移到Ransack gem以升级到Rails 3.1并且我在搜索多态关联时遇到问题。现有的MetaSearch语法不适用于Ransack,但我找不到任何提及任何语法更改的文档。或者Ransack是否支持此功能。

例如,从MetaSearch github页面,给出以下类:

class Article < ActiveRecord::Base
  has_many :comments, :as => :commentable
end

class Post < ActiveRecord::Base
  has_many :comments, :as => :commentable
end

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true
  validates_presence_of :body
end

您可以在表单中创建一个搜索字段(这显然是从Searchlogic借来的约定):

<%= f.text_field :commentable_article_type_body_contains %>

我正在使用这种类型的语法,它在MetaSearch中完美运行,但是对于Ransack,当查询参数包含此字段时,我的应用程序会抛出异常。例外是:

ActiveRecord::EagerLoadPolymorphicError (Can not eagerly load the polymorphic association :ownable)

有人知道如何在Ransack中进行此类搜索吗?

2 个答案:

答案 0 :(得分:8)

我正在努力解决同样的问题(虽然我的错误不同)。我认为您的代码需要:

<%= f.text_field :commentable_of_Article_type_body_contains %>

注意首都A

这对我有用。你可以查看Ernie的多态关联测试here(这是页面上的最后一个文件)

答案 1 :(得分:0)

在我的特殊情况下,即使使用适当的ransack语法,我仍然会收到NameError(未初始化的常量)。

查看

# NAME ERROR

<div class="form-group col-xs-12 col-sm-12 col-md-4 col-lg-4">
  <%= f.label :identifiable_of_Drug_type_name_or_description_cont %>
  <%= f.search_field :identifiable_of_Drug_type_name_or_description_cont, class: 'form-control form-control-bb' %>
</div>

我能够通过使用ransack别名来对此进行补救:

型号

class Identifier < ApplicationRecord
  # note the missing 'cont' predicate
  ransack_alias :name_or_description, :identifiable_of_Drug_type_name_or_description
end

查看

# NO ERROR

<div class="form-group col-xs-12 col-sm-12 col-md-4 col-lg-4">
  # 'cont' predicate is declared in the view
  <%= f.label :name_or_description_cont %>
  <%= f.search_field :name_or_description_cont, class: 'form-control form-control-bb' %>
</div>