4

Rails 3.1にアップグレードするために、MetaSearchgemからRansackgemに移行していますが、ポリモーフィックな関連付けの検索で問題が発生しています。既存の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)

誰かがランサックでこのタイプの検索を行う方法を知っていますか?

4

2 に答える 2

8

私は同じ問題に苦しんでいました(私のエラーは異なっていましたが)。あなたのコードは次のようにする必要があると思います:

<%= f.text_field :commentable_of_Article_type_body_contains %>

大文字の A に注意してください

それは私のために働いた。Ernie のポリモーフィック アソシエーションのテストは、ここでチェックアウトできます(ページの最後のファイルです)。

于 2012-12-18T16:24:37.183 に答える
1

私の特定のケースでは、適切なランサック構文を使用している場合でも、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 に答える