Рендеринг результата метода контроллера в частичное представление - PullRequest
0 голосов
/ 16 марта 2011

У меня есть этот код Rails в методе в контроллере.Требуется четыре параметра, немного математики, и мне бы хотелось, чтобы значение, хранящееся в переменной «посещаемость», было частичным в представлении.

def find_attendance(lesson_id, student_id, start_date, end_date)
    marks = Array.new

    all_registers = Register.where(:lesson_id => lesson_id)

    start_date.upto(end_date) do |date|
        all_registers.each do |register|
            if date == register.date
                this_mark = RegisterMark.where(:student_id => student_id, :register_id => register.id)
                this_mark.each do |mark|
                    marks << mark.mark
                end
            end
        end
    end

    attendance = ((Float(marks.count("O")) + Float(marks.count("N"))) / Float(marks.count)) * Float(100)
end

Я создал _find_attendance.html.erb в соответствующем каталоге представления, и попытался вызвать частичное с помощью <% = render :part => "find_attendance"%>, но у меня возникают проблемы при передаче параметров и использовании правильного имени переменной в частичном.

Я пытался поэкспериментировать с использованием переменных экземпляра для 'посещаемости'.

Какие-нибудь указатели?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Первое, что вам нужно сделать, это поместить значения, которые вы хотите передать своим представлениям (обычные представления и частичные представления), в переменную контроллера, например:

@attendance = ((Float(marks.count("O")) + Float(marks.count("N"))) / Float(marks.count)) * Float(100)

Далее, вы 'Вам нужно будет переименовать ваше частичное что-то, кроме find_attendance.Это имя представления для действия find_attendance, и если я понимаю ваш вопрос, вы хотите, чтобы это представление (find_attendance.html.erb) вызывало частичное с посещаемостью.Итак, попробуйте что-то вроде этого:

find_attendance.html.erb:
<%= render :partial => "attendance", :object => @attendance %>

Теперь внутри частичного _attendance.html.erb вы можете ссылаться на переменную посещаемости экземпляра.(Partials предполагает существование переменной экземпляра с тем же именем, что и частичное; это объект:, который мы прошли через render.

_attendance.html.erb:
<p>Attenance: <%= attendance %></p>
0 голосов
/ 16 марта 2011

Вы почти наверняка захотите добавить этот метод в качестве метода к модели.Может быть, в вашем случае модель урока?

class Lesson < ActiveRecord::Base

  has_many :registers

  def calculate_attendance_for_student(student, start_date, end_date)
    valid_dates = start_date.upto(end_date)   
    registers.each do |register|
    ...
  end
end

Тогда, по вашему мнению, вы можете воспользоваться моделью @lesson, чтобы получить посещаемость.

Есть некоторая область для улучшения ваших циклов, я включилпростой способ перебрать все Записаться на урок выше.Вы можете сделать это как для своего Register.where, так и для RegisterMark.where для повышения скорости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...