Поддерживает ли Ransack в своих поисках те же полиморфные ассоциации «members_to», что и MetaSearch?

Я перехожу с драгоценного камня MetaSearch на драгоценный камень Ransack для обновления до Rails 3.1, и у меня возникают проблемы с поиском полиморфных ассоциаций. Существующий синтаксис MetaSearch не работает для Ransack, но я не смог найти никакой документации, в которой бы упоминались какие-либо изменения синтаксиса. Или поддерживается ли эта функция в Ransack.

Например, со страницы github MetaSearch, учитывая следующие классы:

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?


person dekeguard    schedule 25.10.2012    source источник


Ответы (2)


Я боролся с той же проблемой (хотя моя ошибка была другой). Я думаю, что ваш код должен быть:

<%= f.text_field :commentable_of_Article_type_body_contains %>

обратите внимание на заглавную А

Это сработало для меня. Вы можете проверить тесты Эрни на полиморфные ассоциации здесь (это последний файл на странице)

person joshblour    schedule 18.12.2012

В моем конкретном случае я продолжал получать 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>
person Shay Narang    schedule 13.05.2020