我在控制器中的方法中有这个Rails代码。它需要四个参数,做一些数学运算,我希望它将存储在'attendance'变量中的值返回到视图中的partial。
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文件,并尝试使用&lt;%= render:partial =&gt;调用partial。 “find_attendance”%&gt;但我在传递参数和在部分中使用正确的变量名称时遇到了麻烦。
我尝试过在'出勤'上使用实例变量。
任何指针?
答案 0 :(得分:1)
您需要做的第一件事是将要传递给视图的值(常规视图和部分视图)放入控制器变量中,如下所示:
@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 %>
现在,在partial _attendance.html.erb中,您可以引用实例变量出勤。 (Partials假设存在一个与partial相同名称的实例变量;那就是:我们通过render传递的对象。
_attendance.html.erb:
<p>Attenance: <%= attendance %></p>
答案 1 :(得分:0)
您几乎肯定希望将此方法添加为模型的方法。也许在你的情况下是课程模型?
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 for a Lesson。您可以为Register.where和RegisterMark.where执行此操作以提高速度