2013-09-06 19 views
5

私はRubyの新機能です。私は1つの疑問、コントローラメソッドをビューから呼び出す方法を持っています。ビューからコントローラメソッドを呼び出すRuby on rails

私のコントローラ

def course_user_count 
@courses=Course.all 
@courses.each do |course| 
@count=course.students.count 
end 

私は

+0

[ビューからコントローラのメソッドを呼び出すことはできますか(ヘルパーから呼び出すと理想的です)](http://stackoverflow.com/questions/8906527/can-we-call-a-controllers-method-私たちは、ヘルパーから呼び出すことから理想的には) – lulalala

答えて

8

私は非常にあなたがあなたのビューから「この@count変数を呼び出す」する必要があると言うとき、あなたは何を意味するか理解していません。コントローラでその変数を設定していませんか?その場合、関連するビューで自動的にアクセス可能になります。

第2に、あなたのメソッドは、各コースの学生数を読み込み、変数@countに割り当てます(変数を "呼び出す"ことはできません)。この変数が書き込まれるたびに、その前の値が上書きされるので、書き込まれたメソッドは役に立たない。私はあなたがここで何をしようとしているのかよくわかりません。おそらく各コースのこの値を事前に設定してコントローラを「初期化する」でしょうか?

コントローラのshowメソッドは、関連するデータベースの1行の情報を表示します。目的は、そのビュー内のコースの学生数を示すことであるならば、私はapp/controllers/course_controller.rbにこのような何かを記述します。

class CourseController < ApplicationController 

    def show 
    @course = Course.find(params[:id]) # Here I assume that the url is .../courses/<id> 
    @student_count = @course.students.count 
    end 

    ... 

end 

テンプレートapp/views/courses/show.html.erbでこのような変数の値を表示します。他では

<%= @student_count %> 

言葉では、私はコースの学生数を返すためにコントローラにメソッドを書くのではなく、ビューに表示する必要があるものを渡すのと同じように、ビューのパラメータとして渡します。ビューは非常に簡単な操作ではアクセスできません。実際には@course.students.count、bそれは味の問題です。

しかし、showテンプレートが表示されるたびに、計算するのがより複雑で、必要のない値をコントローラに定義することは意味があります。そのメソッドをビューから呼び出せるようにするには、Keithが彼の答えで述べたように、このメソッドをヘルパーメソッドとして宣言しなければなりません。例えば、app/controllers/course_controller.rb内のすべてのコースの総学生数を返すメソッド:

class CourseController < ApplicationController 

    helper_method :total_student_count 

    def total_student_count 
    total_count = 0 
    Course.all.each do |c| 
     total_count += c.students.count 
    end 
    total_count 
    end 

    ... 

end 

は、そのメソッドの戻り値を表示するようにapp/views/courses/の下で任意のテンプレートでは、このようなメソッドを使用します。

<%= total_student_count %> 
0

お使いのコントローラが変数を介して、あなたのビューにアクセスすることが私の見解をcourse.view.html.erb方法からこの@count変数を呼び出す必要があります:

@controller 

デフォルトで利用可能です。私はもちろん、その特定のビューに関連付けられているコントローラについて話しています。あなたのケースでは

:あなたのビューで次に

helper_method :course_user_count 

、:あなたのコントローラの上部に

@controller.course_user_count 
+0

これはRails 5の場合には当てはまりませんが、テストされていない可能性もあります。 – edwardmp

27

あなたはヘルパーメソッドとして、あなたの意見に利用可能たいメソッドをマークすることができますcourse_user_countを呼び出して結果を保存することができます。

<% count = course_user_count %> 
+4

この回答は受け入れられるはずです... – mahatmanich

+0

@Keith a small 'helper_method:course_user_count'を更新してください。 –

+0

この答えは、Rails 4.0.0で私にとって役に立ちました。どうもありがとうございました! –

1

<% count = course_user_count %> 
0123として表示 呼び出し方法では、ヘルパー・メソッド

としてメソッド名を宣言

関連する問題