-1

这很可能是一个愚蠢的错误,但是我有点坚持在其中设置一些 if 条件

output = "<option value='#{user.id}' #{strDisabled} >if (user.company_name != "")#{user.company_name},&nbsp end if (user.name != "")#{user.name},&nbsp end if (user.email != "")#{user.email} end</option>".html_safe

它只是在输出 ruby​​ 代码,我很可能在几英里之外,但我在一个使用 ruby​​ 的项目上,我没有:)

提前致谢

4

5 回答 5

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 个字符串中的哪一个不是空白的,并将它们与,

于 2013-07-24T15:47:12.227 回答
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(",&nbsp").html_safe
end
#=> "<option value=\"123\">user's company name,&nbsp;user's email</option>"
于 2013-07-24T15:48:28.743 回答
0

您需要将 Ruby 代码的每一部分都放入#{}变量中。我不认为将 if 放在字符串中是一件好事/正确的事情。

于 2013-07-24T15:43:41.050 回答
0

我试图重新格式化您的代码以近似您想要实现的目标:

output = "<option value='#{user.id}' #{strDisabled} >"
if (user.company_name != "")
  output << "#{user.company_name},&nbsp;" 
end 
if (user.name != "")
  output << "#{user.name},&nbsp;" 
end 
if (user.email != "")
  output << "#{user.email}"
end
output << "</option>"
output = output.html_safe

您缺少许多用于不间断空格 HTML 转义码的字符串终止符和分号。但是你的主要问题是你试图在同一条线上做所有事情,并且没有确保你的 if/else 构造是

  1. 在 HTML 字符串之外和
  2. 正确形成。

您是在使用 IDE,还是尝试在文本编辑器中执行此操作?如果是后者,我强烈建议您尝试至少找到一个可以进行语法突出显示的工具,因为这会使您遇到的问题更加明显。

于 2013-07-24T15:46:03.363 回答
0

你可以这样写:

output = "<option value='#{user.id} #{strDisabled}'> 
  #{user.company_name if !user.company_name.blank?},&nbsp; 
  #{user.name if !user.name.blank?},&nbsp; 
  #{user.email if !user.email.blank?}
</option>".html_safe
于 2013-07-24T15:47:40.190 回答