简单的Rails条件语句

时间:2011-01-19 03:52:01

标签: ruby-on-rails syntax

非常简单我确定......但我无法弄清楚为什么它不起作用。

<tr<% if film.viewed == true %> class="viewed"<% end %>>

film.viewed是一个布尔值,但如果它是真的,它不会渲染类。可能是语法错误。有帮助吗?还有一种更简单的方法来写这个没有打开和关闭?我尝试使用:

<tr<% if film.viewed == true puts class=\"viewed\" end %>>

再次可能是语法错误。我来自PHP,所以我还在学习。

感谢。

5 个答案:

答案 0 :(得分:5)

你最好的选择就是以下......

<tr <%= 'class="viewed"' if film.viewed? -%>>

所有布尔ActiveRecord列都会获得一个返回true或false的问号方法。由于MySQL将布尔值存储为1/0,我通常使用问号方法只是为了安全。

答案 1 :(得分:2)

我认为这更容易阅读:

<%= content_tag(:tr, "", :class => film.viewed? ? "viewed" : nil) %>

答案 2 :(得分:0)

我猜电影。查看不是真的,而是另一个价值。

尝试一下

的效果
<tr <%= "class='viewed'" if film.viewed %> >

答案 3 :(得分:0)

<tr <%= film.viewed ? 'class="viewed"' : 'class="notviewed" %> >

所以,有些注意事项。

  • 要完整if ... end你需要一个“;”或end之前的新行。
  • 您实际上有一个名为film的本地变量或参数吗?
  • 您需要<%=而不只是<%才能插入模板代码的最终结果。
  • 我想erb模板驱动程序会根据它获得的结果调用to_s方法,并且由于nil.to_s返回"",因此您可以安全地使用独立的错误{{1} } statement,具有返回if的表达式的效果。但不知何故,表达式始终返回一个值,我愿意看到内插似乎是有意义的。

答案 4 :(得分:0)

我宁愿做这样的事情。

<tr class="<%= film.viewed ? "viewed" : "" -%>"></tr>