【问题标题】:How to use nested ternary operator in link_to in rails view?如何在rails视图的link_to中使用嵌套三元运算符?
【发布时间】:2019-10-19 23:15:26
【问题描述】:

我有一个 Haml 行,我想编辑以添加一个条件,即如果仅在 not_done_task 上存在,如下所示:

从此(此行是正确的):

= link_to "#{not_done_task.count == 0 ? "No" : not_done_task.count} Tasks To Do"

至此(此行写不正确):

= link_to "#{not_done_task.count == 0 ? "No task", not_done_task.count == 1 ? "1 Task", not_done_task.count > 1 ? "not_done_task.count Tasks"} to do"

我希望link_to 部分能够识别三种不同的情况:

(if count == 0, if count == 1 ans if count > 1)

但我的合成器不正确。

【问题讨论】:

  • 我建议不要使用基于?: 的逻辑和语法。取而代之的是,保持代码简洁明了,稍微冗长一些,并在 Haml 中使用常规的if/then/else。一般来说,我们不赞成在 Ruby 中使用 ?: 语法,因为不清楚发生了什么。某些事情的逻辑很容易丢失,从而很容易出现错误和错误。

标签: ruby hyperlink conditional-statements haml conditional-operator


【解决方案1】:

我的解决方案类似于

= link_to task_count

其中 task_count 是一个包含逻辑的(辅助)方法。

以下选项:

1) 普通 if、elsif、else 语句的语法:

if cond1
  stmt1
elsif cond2
  stmt2
elseif cond3
  stmt3
else
  stmt4
end

case when 语句的语法(我最喜欢并且在我看来最易读的方式):

case not_done_task.count
when 0
  'No Task'
when 1
  '1 Task'
when > 1
  "#{Not_done_task.count} Tasks"
end

嵌套三元运算符的语法(为了完整性):

cond1 ? stmt1 : (cond2 ? stmt2 : (cond3 ? stmt3 : stmt4)))

【讨论】:

    【解决方案2】:

    这是解决方案。但是它会使代码难以阅读。三元运算符最好只有两个选项。

    <%= link_to (not_done_task.size == 0 ? "No task" : (not_done_task.size == 1 ? "1 task" : not_done_task.size + "tasks to do")) %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 2013-11-07
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      相关资源
      最近更新 更多