0

我对 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 加载就好了。

我究竟做错了什么?

谢谢

4

3 回答 3

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'
于 2012-12-04T23:12:41.347 回答
2

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

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

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

所以:

一些.html.erb

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

some_helper.rb

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

一些.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')
  .......
于 2012-12-04T23:33:15.463 回答
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

于 2012-12-04T23:26:13.823 回答