要するに、バージョンモデル(paper_trail gemで提供)の属性に対応するフォーム値を、カスタムメソッドを呼び出すコントローラに渡そうとしています。最適化された検索を実行する。しかし、私はNoMethodErrorを受け取りました。このメソッドは、イニシャライザ自体の内部で宣言されたときは意図どおり動作しますが、他の場所では宣言されません。どのように修正するための任意の考えですか?Rails 5アプリに入れ子にしてInitializer内に組み込む方法
コード以下である - 私は、関連思えなかった部分を省略しました:
アプリ/コントローラ/労働/ csr_activities_controller.rb
class Worker::CustomerSupportActivitiesController < Worker::BaseController
def index
PaperTrail::Version.search_versions(resource_params)
end
...
private
def resource_params
params.fetch(:query).permit(:whodunnit, :event, :item_type, :term, :start_date, :end_date)
end
end
アプリ/コントローラ/懸念/ search_versions.rb
module SearchVersions
extend ActiveSupport::Concern
def search_versions(params)
...
end
end
設定/初期化子/ paper_trail.rb
PaperTrail.config.track_associations = false
PaperTrail.config.version_limit = 100
require Rails.root.join('./app/controllers/concerns/search_versions.rb')
module PaperTrail
class Version < ActiveRecord::Base
include SearchVersions
end
end
ターミナル
...
[51e4ee33-6308-4861-bf3a-e1c51ecdfac0] NoMethodError (undefined method `search_versions' for #<Class:0x007f94e5ed2a70>):
...
あなたが正しいとは限りませんが、 "インスタンスではなくモジュール上で検索メソッドを呼び出す" *というのは、 'Module'で拡張された' Class''バージョンでメソッドを呼び出すことです'' SearchVersions'(** Sidenote **:すべてがこの場合のインスタンスです。 'PaperTrail :: Version'は' Class''クラスのインスタンスです) – engineersmnky
良いキャッチ@engineersmnky。説明をありがとう。 – lgants