5

私は使用するシンボルを決めるまでは、それが以前に表示されたかどうかに基づいてアイテムの隣に表示する必要があるかどうかを評価しようとしています。数字を表示したい私のレポートモデルでビューからモデルのメソッドを呼び出す

私は私の見解で

def self.indicator 
    #bunch of if elsif statements returning a number 0-3 
end 

を持って、私は

<% @reports.each do |report| %> 
    <%= report.indicator %> 
<% end %> 

を持っている私は、私は方法がどのように動作するかのグリップを持っていたと思っundefined method 'indicator'

を取得...しかし、明らかに、私は間違って何をしていますか?

+0

完全なエラーメッセージを表示してください。それはクラス/オブジェクトを含んでいますか、それとも未定義のメソッドがnilにありますか? –

+0

また、@reports = Report.allやReport.find(...)などのビューのcontroller文を表示してください。 –

答えて

6

は、[に補正]はクラスレベルのメソッドであるとして、あなたは自分を必要としない

def indicator 
    #bunch of if elsif statements returning a number 0-3 
end 

を試してみてください。

+3

ビュー内でモデルメソッドを呼び出すことは大丈夫ですか?そのようにコントローラーをスキップしていますか?また、それが良い習慣でない場合、代替は何ですか? – gotqn

2

reportの反復変数は、すべてのインスタンスが@reportsになるために使用されます。 self.indicatorでクラスメソッドを宣言しています(self.name経由)。これにより、Report.indicatorに電話することが可能になります。何が欲しいのは、あなたがこのようなモデル内のメソッドの指標を定義することができるように、レポートの単一のインスタンスにだけ呼び出すことです:

def indicator 
    #bunch of if elsif statements returning a number 0-3 
end 

さて、これは動作するはずです!

6

あなたのビューでは、各レポートオブジェクト

report.indicator 

上のインスタンスメソッドindicatorを呼び出している。しかし、あなたのモデルでは、クラスメソッドを定義しています。ですから、インジケータメソッドをインスタンスメソッドとして定義することもできます。

def indicator 
    #bunch of if elsif statements returning a number 0-3 
end 
関連する問題