2011-01-19 8 views
0

아주 간단합니다. 그러나 나는 그것이 작동하지 않는 이유를 알 수 없습니다.간단한 레일 조건문

<tr<% if film.viewed == true %> class="viewed"<% end %>> 

film.viewed는 부울이지만 해당되는 경우 클래스를 렌더링하지 않습니다. 아마도 구문 오류 일 것입니다. 어떤 도움이 필요합니까? 또한 열거 나 닫지 않고 이것을 작성하는 쉬운 방법이 있습니까? 나는 다음을 사용하여 시도했다 :

<tr<% if film.viewed == true puts class=\"viewed\" end %>> 

다시 말해서 아마도 구문 오류 일 것이다. 나는 PHP에서 왔기 때문에 나는 아직도 배우고있다.

감사합니다.

+0

"아마도 구문 오류"입니까? 오류 메시지가 표시되고 있습니까, 아니라? 또한, 조건의'== true' 부분은 불필요합니다. – ryeguy

답변

5

가장 좋은 방법의 효과에 뭔가를 시도 또는 거짓. MySQL은 boolean 값을 1/0으로 저장하므로 대개 안전을 위해 물음표를 사용합니다.

+0

이것은 Rails 3.1의 새로운 기능 일 수 있습니다 (확실하지는 않습니다, 저는 newb입니다). 그러나 위의 기능은 제대로 작동하지 않을 것입니다. 나는 템플릿에서 작은 따옴표로 큰 따옴표를 넣으려고했는데, Rails는 그것을 html 엔티티 (")로 변환합니다. 따라서 소스 코드는 다음과 같이 끝납니다 :''film.viewed 인 경우 위 코드를'

0

나는 film.viewed가 아닌 다른 값을 추측하고 있습니다.

다음 ...

<tr <%= 'class="viewed"' if film.viewed? -%>> 

모든 부울 액티브 열

는 사실을 반환하는 물음표 방법을 얻을 같은 것을 할 것

<tr <%= "class='viewed'" if film.viewed %> > 
0
<tr <%= film.viewed ? 'class="viewed"' : 'class="notviewed" %> > 

그래서 몇 가지 메모.

  • if ... end 전체를 수행하려면 ";" 또는 개행 문자가 end 앞에 있습니다.
  • film이라는 로컬 변수 또는 매개 변수가 실제로 있습니까?
  • 템플릿 코드의 최종 결과를 보간하려면 <%이 아닌 <%=이 필요합니다.
  • 은 내가 ERB 템플릿 드라이버가 가져 어떤 결과에 to_s 메소드를 호출 상상하고 nil.to_s 반환 이후 ""는 당신은 nil를 반환하는 식으로 효과가 독립형 거짓 if 문에 안전합니다. 하지만 어쨌든 표현식을 사용하면 항상 보간 된 것을 볼 의향이있는 값을 반환합니다.
+0

또는 가장 선호하지 않는 키워드 인'then' – EnabrenTane

2

나는이 읽을 easer 생각 : 나는 오히려 이런 일을 할 것

<%= content_tag(:tr, "", :class => film.viewed? ? "viewed" : nil) %> 
0

.

<tr class="<%= film.viewed ? "viewed" : "" -%>"></tr>