我是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答案 0 :(得分:1)
对于三元运营商来说,这不是一个好例子。如果您希望x
出现x
或y
,则使用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>'