ruby的新手和if语句有点卡住了

时间:2013-07-24 15:35:14

标签: ruby-on-rails ruby

这很可能是一个愚蠢的错误,但是如果我在这个

中设置一些条件,我就会陷入困境
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的项目,我没有:)

提前致谢

5 个答案:

答案 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(",&nbsp").html_safe
end
#=> "<option value=\"123\">user's company name,&nbsp;user's email</option>"

答案 2 :(得分:0)

您需要将每个Ruby代码片段放入#{}而不仅仅是变量。 我不这么认为将if放入字符串中是一件好事/适当的事情。

答案 3 :(得分: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. 正确形成。
  3. 您使用的是IDE,还是尝试在文本编辑器中执行此操作?如果是后者,我强烈建议您尝试至少找到一个会进行语法突出显示的内容,因为这会使您遇到的问题更加明显。

答案 4 :(得分: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