Ruby on Rails:我在我的节目中有代码来计算年龄,但它会显示所有的计算结果。我怎么得到它所以它只显示年龄?

时间:2016-11-03 19:05:49

标签: ruby-on-rails

<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>

因此,此代码成功获取学生的出生日期并显示年龄。但是,在查看网页时,它会显示所有计算结果。我怎么得到它才能显示年龄?

1 个答案:

答案 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>

我希望它有所帮助