0

実際、これが私の問題です。MainController、HttpHelper、ServiceHelperを備えたRailsアプリがあります。

main_controller.rb

class MainController < ApplicationController
    include ServiceHelper
    def my_method
        Service.make_stuff
    end
end

service_helper.rb

module ServiceHelper
    class Service
        include HttpHelper
        def self.make_stuff
            http__foo
        end
    end
end
Service = ServiceHelper::Service

http_helper.rb

module HttpHelper
    def http__foo
        #stuff
        params[:bar].nil?
    end
end

すべてがうまくいく場合、このコードは:barパラメータが存在するかどうかを教えてくれるはずですが、問題があります。まず、このコードは機能しません。これは、サービス内が機能しないhttp__fooため、定義されていないことを示しています。include HttpHelper

私の2番目の問題は、インクルードが機能する場合、params変数に問題がある可能性があることです。コントローラでこのメソッド(http__foo)を呼び出すと問題ありませんが、サブクラスから呼び出すと、信頼できるかどうかわかりません。

4

2 に答える 2

1

make_stuffクラスメソッドです。http_fooインスタンスメソッドです。したがって、http__fooから呼び出す場合は、定義されていないmake_stuff呼び出しのようなものです。Service.http_foo()定義されているのはService.new.http_foo()です。

あなたが何をしたいのかわかりませんが、私の謙虚な意見では、あなたのコードを見ると、あなたが(なぜ使用しないのですか?)、そしてあなたがあなたのヘルパーを使用する方法に本当に精通しRails MVC conceptて作成しているようには見えません私には奇妙です。最初からやり直すことをお勧めします。MainControllerApplicationController

于 2012-09-20T04:26:05.163 に答える
0

クラスとインスタンス メソッドの問題については、oldergod が正しいです。さらに、params は ActionControllor で定義されたメソッドであり、すべてのコントローラーの継承ツリーの上位にあります。params メソッドは、ActionController または ApplicationController のサブクラスにしない限り、Service (Service に HttpHelper を含めた場合の最終的な場所) では使用できません。これはコントローラーではないため、少し奇妙です。

于 2012-09-20T05:57:02.317 に答える