Ruby on rails - 如何在一行中编码这个“if 语句”



有没有可能的方法可以在一行中编码?如果......<>

<% if @box == 'inbox' && m.is_read?(current_user) %>
A
<% else %>
B
<% end %> 

你需要一个三元运算符——在 Ruby 中也称为"条件"运算符,如果 ? 前面的表达式为真,则返回 "A",如果表达式为 false,则返回 "B"。

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

三元运算符可以解决问题(有关如何使用它,请参阅其他答案),但我强烈建议您不要在这里使用它。使用三元操作器,您将减少代码,但您的可读性将因此受到很大影响。

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

def inbox_msg_read?(box, msg)
  box == 'inbox' && msg.is_read?(current_user)
end
<%= inbox_msg_read?(@box, msg) ? 'A' : 'B' %>

根据这里实际发生的情况,我可能会将"A"/"B"部分也移动到帮助程序中。

我将"收件箱"逻辑移动到帮助程序方法或邮箱对象中:

box.inbox? && msg.is_read?(current_user)

这会将收件箱逻辑隔离到单个位置(例如,不分散在任意数量的视图文件中),如果您需要其他框的其他逻辑(例如,"垃圾箱"或其他内容),则会创建一个焦点。

它还提供了一个提示,即如果存在任意数量的知名盒子(例如,垃圾箱、已发送、今天等),元编程的东西可能对识别盒子很有用。这完全取决于正在发生的事情。

像这样在视图层中分散逻辑使重构变得不那么明显,并在逻辑/输出需要更改时强制多个更改点。

相关内容

  • 没有找到相关文章

最新更新