2017-06-30 9 views
0

要するに、バージョンモデル(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>): 
... 

答えて

1

クラシック - ここに掲載した直後にそれを考え出しました。問題を修正するには、

include SearchVersions~extend SearchVersions inside config/initializers/paper_trail.rbを修正します。

Module SearchVersionsによって拡張されたClassバージョンのメソッドを呼び出すので、基本的にはextendを使用する必要があります。

編集:混乱を避けるため、engineersmnkyのコメントに基づいて用語を変更しました。

+1

あなたが正しいとは限りませんが、 "インスタンスではなくモジュール上で検索メソッドを呼び出す" *というのは、 'Module'で拡張された' Class''バージョンでメソッドを呼び出すことです'' SearchVersions'(** Sidenote **:すべてがこの場合のインスタンスです。 'PaperTrail :: Version'は' Class''クラスのインスタンスです) – engineersmnky

+0

良いキャッチ@engineersmnky。説明をありがとう。 – lgants

関連する問題