Rails - 如果填充字段,如何渲染图像?

时间:2017-02-01 21:31:03

标签: ruby-on-rails ruby ruby-on-rails-4

在我的应用程序中,用户可以说他们已经完成了一项功课。

字段" 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 %>

3 个答案:

答案 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才能正常工作。