2012-12-04 157 views
0

我遇到了一些有關Ruby的條件邏輯的問題。無可否認,我是Ruby的所有人的新手。問題與條件邏輯 - Ruby on Rails

此代碼是導致網站無法加載:

<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加載就好了。

我在做什麼錯?

謝謝

回答

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' 
+0

變量@is_home_page只能將就存在o在主頁上,有這個工作嗎?或者我需要使用.present? –

+0

@resonantmedia如果未設置實例變量,它將等於零,三元組仍然可以工作。儘管這看起來有點像代碼味道。 –

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

+1

我的答案完全避免了對「@ is_home_page」變量的需求。 – deefour

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') 
    .......