2017-05-24 14 views
1

モジュールVoltaireがうまく動作しました。そして、私の記事のコントローラでは、パラメータに渡される量だけユーザーの評判を上げる方法がありました。gemに移動した後にモジュールが動作しなくなる

私はモジュールを宝石で提供することにしました。私は以来、私のapplication_controller.rbファイルからモジュールを削除し、そしてそれ自身の宝石作られた、githubのにプッシュし、バンドルは、それをインストールしている:

class ArticlesController < ApplicationController 
    include Voltaire 

    def upvote 
    @article.upvote_by current_user 

    voltaire_up(1, :reputation, @article.user_id) 
    redirect_to :back 
    end 

    def downvote 
    @article.downvote_by current_user 

    voltaire_down(1, :reputation, @article.user_id) 
    redirect_to :back 
    end 
end 

私はモジュールからのいずれかの方法を使用すると、私はundefined method `voltaire_down'を取得しますそれは前に働いた場所です。

コントローラからinclude Voltaireを削除しようとしましたが、これはまだ動作していません。

私には何が欠けていますか?

+0

あなたのプロジェクトには 'voltaire'というフォルダがありますか? – fylooi

+0

gemのlibディレクトリに1つあります。構造はlib/voltaire/voltaire.rbのようです – ddonche

+0

あなたは宝石へのリンクを共有できますか? – fylooi

答えて

1

これを動作させる唯一の方法は、コントローラの上部にinclude Voltaireを置くことでした。私はレールが自動的にこれをしたという印象を受けましたが、私は2つの別々のアプリで宝石を試しましたが、これが機能する唯一の方法です。

EDIT

私はこのコメントのいくつかの後に正常に機能するにはなっ管理。私のモジュールがある宝石のファイルに、私はこれを含めたばかりです。これでレールはコントローラに組み込み、完全に動作します。

if defined? ActionController::Base 
    ActionController::Base.class_eval do 
    include Voltaire 
    end 
end 
+1

Railsはgemを自動的に読み込みますが、 'include 'するのには役立ちません。関連するほとんどの宝石には 'ActionController :: Base'にそれをロードする行があります。例えば。 https://github.com/CanCanCommunity/cancancan/blob/develop/lib/cancan/controller_additions.rb – fylooi

関連する問題