<p>
<strong>Dob:</strong>
<%= @student.dob %>
<%= today = Date.today%>
<%= d = Date.new(today.year, @student.dob.month, @student.dob.day)%>
<%= age = d.year - @student.dob.year - (d > today ? 1 : 0)%>
<strong>Age:</strong>
<%=age%>
</p>
因此,此代码成功获取学生的出生日期并显示年龄。但是,在查看网页时,它会显示所有计算结果。我怎么得到它才能显示年龄?
答案 0 :(得分:3)
试试这个:
<p>
<strong>Dob:</strong>
<%= @student.dob %>
<% today = Date.today%>
<% d = Date.new(today.year, @student.dob.month, @student.dob.day)%>
<% age = d.year - @student.dob.year - (d > today ? 1 : 0)%>
<strong>Age:</strong>
<%= age %>
</p>
问题是你在erb模板的行的开头使用了等号(=),其中包含变量赋值和计算,它打印出结果将Ruby代码评估到您的模板中。
请注意,这种逻辑不应该在您的视野中。视图仅用于显示填充了模型提供的信息的html标记。在这种情况下,我认为在学生模型中使用这个逻辑要好得多,如下所示:
def age
d = Date.new(Date.today.year, dob.month, dob.day)
d.year - dob.year - (d > Date.today ? 1 : 0)
end
然后,您的观点将是这样的:
<p>
<strong>Dob:</strong>
<%= @student.dob %>
<strong>Age:</strong>
<%= @student.age %>
</p>
我希望它有所帮助