在我的应用程序中,用户可以说他们已经完成了一项功课。
字段" completed_on"填写完成作业的日期。如果没有完成,该字段为空白。
如果家庭作业完成,我想要勾选,如果家庭作业没有完成,我想显示x。
专栏" completed_on"位于一个名为homework_students的表中。
class Homework < ActiveRecord::Base
has_many :homework_students, :class_name => 'HomeworkStudent'
class HomeworkStudent < ActiveRecord::Base
belongs_to :homework, :class_name => 'Homework'
我尝试过以下哪项对我不起作用:
在我的模特中:
def getCompletion
homework_students.where("completed_on is not null")
end
查看:
<% if homework.getCompletion %><%= image_tag "fi-check.svg", class: "homework_student_complete" %><% else %><%= image_tag "fi-x.svg", class: "homework_student_complete" %><% end %>
我也试过这个:
模型
def completed?
!homework.homework_student.completed_on.blank?
end
查看
<% if homework.completed? %>
<%= image_tag "fi-check.svg", class: "homework_student_complete" %><% else %><%= image_tag "fi-x.svg", class: "homework_student_complete" %><% end %>
感谢任何指导。
更新
这有效:
def completed?
homework_students.where("completed_on is not null").length == 0
end
<% @homeworks.each do |homework| %>
...
<td height="1" class="text-center"><% if homework.completed? %>
<%= image_tag "fi-check.svg", class: "homework_student_complete" %>
<% else %>
<%= image_tag "fi-x.svg", class: "homework_student_complete" %>
<% end %></td>
...
<% end %>
答案 0 :(得分:2)
getCompletion
方法的返回类型为ActiveRecord::Relation
。然后,您通过将其置于条件内来询问是否存在此关系。这将始终为true
,即使关系包含空数据集(例如[]
),因为空数组是真实的。
您应该期望getCompletion
返回HomeworkStudent
条记录的集合。如果你想要显示一个勾号,或者只有当所有学生都完成了作业时才需要'x',那么你需要一个聚合方法来检查所有记录(如果有的话,或者没有,等等)。尝试做类似的事情:
# app/models/homework.rb
def completed?
homework_students.where("completed_on is null").none?
end
# in the view
<% if homework.completed? %>
<%= image_tag "fi-check.svg", class: "homework_student_complete" %>
<% else %>
<%= image_tag "fi-x.svg", class: "homework_student_complete" %>
<% end %>
有关http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-none-3F
上的ActiveRecord :: Relation方法的更多信息答案 1 :(得分:1)
查询的结果可以是ActiveRecord :: Relation或空数组,在这两种情况下if语句的计算结果为true。尝试将您的查询更改为:
def completion
homework_students.where("completed_on is null").length == 0
end
答案 2 :(得分:-1)
你的方法get_completion没有返回任何东西。试试这个
@homework_student = homework_students.where("completed_on is not null")
return @homework_student
可能有效。还要确保completed_on不为null才能正常工作。