条件逻辑问题 - Ruby on Rails

时间:2012-12-04 23:08:59

标签: ruby-on-rails ruby

我遇到了Ruby的一些条件逻辑问题。不可否认,我是Ruby的所有新手。

此代码导致网站无法加载:

<body style="background-image:url("<%= if @is_home_page.present? '/images/bg-main-power-bg.jpg' else '/images/bg-inner-power-bg.jpg' end %>"); background-repeat:repeat-x;">

没有条件,CSS加载就好了。

我做错了什么?

由于

3 个答案:

答案 0 :(得分:2)

使用三元运算符进行内联条件。

condition ? branch_a : branch_b

a == b ? "foo" : "bar"
# is the same as
if a == b
  "foo"
else
  "bar"
end

针对您的具体情况:

@is_home_page ? '/images/bg-main-power-bg.jpg' : '/images/bg-inner-power-bg.jpg'

答案 1 :(得分:2)

您的原始代码:您可能遇到的错误可能是由于此代码段"中的第二个"background-image:url("<%= ...造成的。尝试更改它,以便<%= ... %>在单引号内,而不是双引号,因为整个字符串已经用双引号分隔。

理想情况下,您应该努力:

  • 从视图中删除逻辑
  • 避免使用内联样式。

所以:

some.html.erb

<body class='<%= body_class %>'>

some_helper.rb

class SomeHelper
  def body_class
    @is_home_page.present? ? "has_homepage" : "no_homepage"
  end
end

some.css:

body.has_homepage
  background-image:url('/images/bg-main-power-bg.jpg')
  .......
body.no_homepage
  background-image:url(/images/bg-inner-power-bg.jpg')
  .......

答案 2 :(得分:1)

您也可以考虑将其移至帮助文件。您可以将以下内容添加到app/helpers/application_helper.rb

def bg_path
  return '/images/bg-main-power-bg.jpg' if current_page? root_path
  '/images/bg-inner-power-bg.jpg'
end

这使您的视图更清晰。

<body style="background-image:url("<%= bg_path %>"); background-repeat:repeat-x;">

阅读:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-current_page-3F