Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在一行内编写这个'if语句'?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何在一行内编写这个'if语句'?

Ruby on rails 如何在一行内编写这个'if语句'?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,有没有任何可能的方法在一行中编码?类似 A. B 您需要一个三元运算符–在Ruby中也称为“条件”运算符,如果?前面的表达式为true,则返回“a”;如果表达式为false,则返回“B” <%= (@box == 'inbox' && m.is_read?(current_user)) ? "A" : "B" %> 您需要一个三元运算符–在Ruby中也称为“条件”运算符,如果?前面的表达式为true,则返回“a”;如果表达式为false,则返回“B” <%=

有没有任何可能的方法在一行中编码?类似


A.
B

您需要一个三元运算符–在Ruby中也称为“条件”运算符,如果
前面的表达式为true,则返回“a”;如果表达式为false,则返回“B”

<%= (@box == 'inbox' && m.is_read?(current_user)) ? "A" : "B" %>

您需要一个三元运算符–在Ruby中也称为“条件”运算符,如果
前面的表达式为true,则返回“a”;如果表达式为false,则返回“B”

<%= (@box == 'inbox' && m.is_read?(current_user)) ? "A" : "B" %>


三元运算符会起作用(请参阅其他答案了解如何使用它),但我强烈建议您不要在这里使用它。使用三元运算符可以减少代码量,但可读性会因此受到很大影响。

三元运算符可以做到这一点(有关如何使用它,请参阅其他答案),但我强烈建议您不要在此处使用它。使用三值运算器会减少代码量,但可读性会因此受到很大影响。

三值运算器只会让您在视图层头疼;逻辑应该在助手中,例如

def收件箱\u消息\u已读?(框,消息)
box=='inbox'&&msg.是否已读取?(当前用户)
终止
根据这里实际发生的情况,我可能也会将“A”/“B”部分移动到助手中

我会将“收件箱”逻辑移动到助手方法或邮箱对象中:

box.inbox? && msg.is_read?(current_user)
这将收件箱逻辑隔离到单个位置(例如,不分散在任意数量的视图文件中),并在您需要其他框(例如,“垃圾箱”或其他东西)的其他逻辑时创建单个焦点

它还提供了一个提示,即元编程可能有助于识别框,如果存在任意数量的已知框(例如,垃圾箱、已发送的、今天的等等),这一切都取决于发生了什么


将这样的逻辑分散到视图层会使重构变得不那么明显,当逻辑/输出需要更改时,会强制进行多个更改点。

三元逻辑只会让您在视图层头疼;逻辑应该在助手中,例如

def收件箱\u消息\u已读?(框,消息)
box=='inbox'&&msg.是否已读取?(当前用户)
终止
根据这里实际发生的情况,我可能也会将“A”/“B”部分移动到助手中

我会将“收件箱”逻辑移动到助手方法或邮箱对象中:

box.inbox? && msg.is_read?(current_user)
这将收件箱逻辑隔离到单个位置(例如,不分散在任意数量的视图文件中),并在您需要其他框(例如,“垃圾箱”或其他东西)的其他逻辑时创建单个焦点

它还提供了一个提示,即元编程可能有助于识别框,如果存在任意数量的已知框(例如,垃圾箱、已发送的、今天的等等),这一切都取决于发生了什么


将这样的逻辑分散到视图层会使重构变得不那么明显,并且当逻辑/输出需要更改时,会强制多个更改点。

+1我讨厌看到链式条件的三元运算符,它会降低可读性。谁在乎它是不是在一条线上?事实上,说得对。至少在这种情况下,它不会使事情变得更漂亮。我还建议将“m”变量更改为“message”(假设是这样)。这样会更可读。+1我讨厌看到链式条件的三元运算符,它会降低可读性。谁在乎它是不是在一条线上?事实上,说得对。至少在这种情况下,它不会使事情变得更漂亮。我还建议将“m”变量更改为“message”(假设是这样)。通过这种方式,它将更具可读性。您可以简单地嵌套这些语句,例如,
expr?(expr?ret_true:ret_false):ret_false
,但我真的建议不要这样做。在可读性方面有很大的折衷。@HUSTEN你能解释一下为什么你想把所有的东西都放在一行上吗?因为它看起来更简单sophisticated@HUSTEN我明白了……不客气。不过请注意:作为一名Ruby程序员,一般来说,任何以后需要维护代码的人都可能会为了代码的可读性而与任何看起来“复杂”的东西进行交换?(expr?ret_true:ret_false):ret_false,但我真的建议不要这样做。在可读性方面有很大的折衷。@HUSTEN你能解释一下为什么你想把所有的东西都放在一行上吗?因为它看起来更简单sophisticated@HUSTEN我明白了……不客气。不过请注意:作为一名Ruby程序员,一般来说,任何以后需要维护代码的人都可能会为了代码的可读性而与任何看起来“复杂”的东西进行权衡。次要的设计:如果你的
框只接受一小部分值,最好不要将其硬编码为字符串,而是使用符号,例如,
if@box==:inbox
。次要设计事项:如果你的
box
只接受一小部分值,最好不要将其硬编码为字符串,而是使用符号,例如,
if@box==:inbox