4

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

4

2 回答 2

8

我一直在努力解决同样的问题(尽管我的错误不同)。我认为您的代码需要是:

<%= f.text_field :commentable_of_Article_type_body_contains %>

注意大写A

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

于 2012-12-18T16:24:37.183 回答
1

在我的特殊情况下,即使使用适当的 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>
于 2020-05-13T03:47:38.003 回答