Я не совсем понимаю, что вы имеете в виду, когда вы говорите, что вы должны «назвать эту @count
переменную» с вашей точки зрения. Вы не устанавливаете эту переменную в своем контроллере? Если это так, он должен автоматически быть доступен в соответствующем представлении. (Вы не «вызываете» переменную, вы ее читаете или устанавливаете.)
Во-вторых, ваш метод читает количество учеников каждого курса, а затем присваивает его переменной @count
. Каждый раз, когда эта переменная записывается, ее предыдущее значение перезаписывается, поэтому метод, написанный, бесполезен. Я не уверен, что вы пытаетесь сделать здесь - возможно, «инициализируя» контроллер, установив это значение заранее для каждого курса?
По соглашению, метод контроллера show
контроллера отображает информацию для одной строки связанной базы данных. Если цель состоит в том, чтобы показать количество студента Курса в этой точке зрения, я хотел бы написать что-то вроде этого в 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 это дело вкуса.
Однако может иметь смысл определить метод в контроллере для значений, которые являются более сложными для вычисления и/или не нужны при каждом отображении шаблона . Чтобы сделать этот метод вызываемым из ваших представлений, метод должен быть объявлен вспомогательным методом, как упоминал Кейт в своем ответе.Например, метод, который возвращает общее количество студента всех курсов в 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 %>
Возможный дубликат [Можно ли вызвать метод контроллера из представления (как мы обычно называем хелпера)?] (Http://stackoverflow.com/questions/8906527/can-we-call-a-controllers-method- from-a-view-as-we-call-from-helper-ideal) – lulalala