2012-12-04 3 views
0

Ruby에서 일부 조건부 논리에 문제가 있습니다. 틀림없이 나는 루비에 대한 모든 것을 초보자입니다.조건부 논리 문제 - Ruby on Rails

이 코드는로드하지 않는 사이트를 일으키는 : 잘 CSS의 부하 조건없이

<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;"> 

합니다.

내가 뭘 잘못하고 있니?

감사

답변

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는 것이다 존재한다. 이 작업에 대한 홈페이지가 있습니까? 아니면 .present를 사용해야합니까? –

+0

@resonantmedia 인스턴스 변수가 설정되어 있지 않으면 nil과 같고 세 번째 변수는 계속 작동합니다. 이것은 약간의 코드 냄새처럼 보입니다. –

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