Ruby on Rails中的三元运算符

时间:2018-05-17 12:11:39

标签: ruby-on-rails

我是Rails的新手。我试图在我的一个邮件文件中使用三元运算符..

body += "<p>UTM_SOURCE: #{user.get_utm_params[:source]}</p>" if user.get_utm_params[:source].present? + ":" + "<p>N/A</p>"

我将此数据输出附加到我通过我的应用程序发送的邮件正文中,尝试使用三元运算符,但我继续为&#34; +&#34;

获取NoMethodError

2 个答案:

答案 0 :(得分:1)

对于三元运营商来说,这不是一个好例子。如果您希望x出现xy,则使用presence方法和||运算符。 presence会返回值present?nil,否则会根据presence?将值“强制”转换为真值/假值,以便您可以使用它与布尔运算符。

body += "<p>UTM_SOURCE: #{user.get_utm_params[:source].presence || "N/A"}</p>"

更好的解决方案是定义一个帮助方法,它将为您返回源或"N/A",并将此逻辑从您的邮件中删除。

顺便说一句,在这里使用三元运算符的正确方法是:

utm_source = user.get_utm_params[:source]
body += "<p>UTM_SOURCE: #{utm_source.present? ? utm_source : "N/A"}</p>"

请注意,三元运算符中没有if,并且present?方法的问号不是运算符的一部分。即使a ? b : c以问号结尾,您仍然需要所有三个操作数和两个操作员字符a

答案 1 :(得分:0)

您的代码中的语法无效。

body += "<p>UTM_SOURCE: #{user.get_utm_params[:source]}</p>#{user.get_utm_params[:source].present? ? ':' : '<p>N/A</p>'}"

或者

body += "<p>UTM_SOURCE: #{user.get_utm_params[:source]}</p>"
body += user.get_utm_params[:source].present? ? ':' : '<p>N/A</p>'