这很可能是一个愚蠢的错误,但是如果我在这个
中设置一些条件,我就会陷入困境output = "<option value='#{user.id}' #{strDisabled} >if (user.company_name != "")#{user.company_name},  end if (user.name != "")#{user.name},  end if (user.email != "")#{user.email} end</option>".html_safe
它只是输出ruby代码,我很可能在数英里外,但我正在使用ruby的项目,我没有:)
提前致谢
答案 0 :(得分:2)
这是一个快速重构,可以更容易地阅读代码。
output = "<option value='#{user.id}' #{strDisabled}>"
output << "#{user.company_name }, " if user.company_name.present?
output << "#{user.name}, " if user.name.present?
output << user.email if user.email.present?
output << "</option>"
output.html_safe
另一种方法是
output = "<option value='#{user.id}' #{strDisabled}>"
output << ([user.company_name, user.name, user.email].reject(&:blank?) * ', ')
output << "</option>"
output.html_safe
第二行只选择3个字符串中的哪一个不为空,并将其与,
答案 1 :(得分:2)
Rails有一个content_tag
帮助器来生成HTML标记:
content_tag :option, value: user.id do
output = []
output << user.company_name unless user.company_name.blank?
output << user.email unless user.email.blank?
output.join(", ").html_safe
end
#=> "<option value=\"123\">user's company name, user's email</option>"
答案 2 :(得分:0)
您需要将每个Ruby代码片段放入#{}
而不仅仅是变量。
我不这么认为将if放入字符串中是一件好事/适当的事情。
答案 3 :(得分:0)
我试图重新格式化您的代码,以估算您尝试实现的目标:
output = "<option value='#{user.id}' #{strDisabled} >"
if (user.company_name != "")
output << "#{user.company_name}, "
end
if (user.name != "")
output << "#{user.name}, "
end
if (user.email != "")
output << "#{user.email}"
end
output << "</option>"
output = output.html_safe
对于非中断空格HTML转义码,您缺少许多字符串终止符和分号。但是你的主要问题是你试图在同一条线上做所有事情,而不是确保你的if / else结构是
您使用的是IDE,还是尝试在文本编辑器中执行此操作?如果是后者,我强烈建议您尝试至少找到一个会进行语法突出显示的内容,因为这会使您遇到的问题更加明显。
答案 4 :(得分:0)
output = "<option value='#{user.id} #{strDisabled}'>
#{user.company_name if !user.company_name.blank?},
#{user.name if !user.name.blank?},
#{user.email if !user.email.blank?}
</option>".html_safe