我正在从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中进行此类搜索吗?
答案 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>