0

私はRails 4.2.5を使用しています。私はこのスーパークラスにRoRでは、スーパークラスのクラス変数を認識するためにサービスクラスのサブクラスを取得するにはどうすればよいですか?

class AbstractImportService 

    def initialize(params) 
    @init_url = params[:init_url] 
    end 

    private 

    attr_reader :init_url 

を持っているし、それから

class MyService < AbstractImportService 

    def self.my_method(runner_id) 
    puts "init_url: #{@init_url}" 
    … 
    end 

を継承し、このクラスには問題は方法では、「self.my_method、」プットラインアウト出力します「init_urlを:」でも、私が最初に@init_urlを何かに付けるならば。 Railsにはprotectedの概念がないので、サブクラスにスーパークラスのクラスメンバー変数を認識させる別の方法がありますか?あなたが(とないこのクラスのオブジェクトに)たMyServiceクラスで呼び出され self.my_method(runner_id) ことによってそれを得るためにそれをしようとし、その値を得ることを期待することはできませんので

答えて

0

@init_url = params[:init_url] は、インスタンス変数です。 で試してみてください:私は私がMyServiceでクラス内で「@init_url」の価値を認識できるようにするために必要なものhcangesあなたの答えから明らかではないよ

class AbstractImportService 

    def initialize(params) 
    @init_url = params[:init_url] 
    end 

    private 
    attr_reader :init_url 

end 

class MyService < AbstractImportService 

    def my_instance_method 
    "init_url: #{@init_url}" 
    end 
end 

2.2.1 :004 > instance = MyService.new({init_url: "http://www.example.com"}) 
=> #<MyService:0x007fd5db892250 @init_url="http://www.example.com"> 
2.2.1 :005 > instance.my_instance_method 
=> "init_url: http://www.example.com" 
+0

。精巧なサンプルとコードサンプルは常に有用です。 –

+0

さて、私は上記の答えを編集し、コードサンプルを追加します。あなたのために大丈夫ですか@マイク? –

関連する問題