2010-04-15 3 views
3

내가 사용자 모델을했습니다 및 사용자 정보의 무리 등 이메일, 생년월일, 위치, 전화 번호의 가장 간단한 방법은 무엇

처럼, 거기에 말 레일의 뷰에서 모델 비 비어의 속성을 보여 비어있는 속성을 숨기고 있습니까?

내가

<% if blog.title.empty? -%> 
<p>Body: <%=h blog.body %></p> 
<p>Comments: <%=h blog.comments %></p> 

<% elsif blog.body.empty? %> 
<p>Title: <%=h blog.title %></p> 
<p>Comments: <%=h blog.comments %></p> 

<% else -%> 
<p>Title: <%=h blog.title %></p> 
<p>Body: <%=h blog.body %></p> 
<% end -%> 

같은 일을했습니다 분명히 그 못생긴 아이입니다. 렌더링에 partials를 사용하는 것 외에 비어 있지 않은 필드 만 표시하는 트릭이 있습니까?

나는보기를 더 깨끗하게하기 위해 도우미 방법을 쓰려고했지만, 그것은 훨씬 더 추해 보인다.

도움을 주시면 감사하겠습니다.

+0

당신이 경우-다른 조건을 사용하여 할 수 없습니다. 왜냐하면 다른 ELSIF 조건에 상관없이 IF 조건이 참이된다면 실행되지 않기 때문입니다. 예 : - 제목과 본문 모두 비어 있지 않습니다. 제목 만 볼 수 있습니다. – Salil

+0

실제로 그것은 나를 위해 일했습니다. 한 가지가 일치하면 다른 항목이 실행되기를 원하지 않거나 각 항목의 세 가지 인스턴스를 갖게됩니다. 전체 내용은 @blogs의 블로그에서 볼 수 있습니다. 각 예제에서는 단계별로 한 번씩 반환됩니다. –

답변

3

나는 이런 식으로 그것을 할 것입니다 당신이 짧은 도우미 이름을 사용할 수 있습니다 물론 등등

<%= show_non_blank_field "Body", blog.body %> 

및 ...

합니다.

당신이 if-else 방법으로 그것을 수행하려는 경우

,이 시도 :

<% if !blog.title.blank? -%> 
<p>Title: <%=h blog.title %></p> 
<% end %> 

<% if !blog.body.blank? %> 
<p>Body: <%=h blog.body %></p> 
<% end %> 

<p>Comments: <%=h blog.comments %></p> 
+0

완벽하게 작동합니다. 감사! –

+0

그 테마의 약간의 변형으로, 다음과 같이 포함 된 HTML을 제거하기 위해 "content_tag"(헬퍼 또는 뷰에서)를 사용할 수 있습니다. content_tag (: p, "% s : % s" % [label, value]) value.blank가 아닌 한? – NeilS

+0

나는 content_tag가 그런 식으로 사용될 수 있는지 몰랐다. 감사. SQL 인젝션은 어떻습니까? 나는 label이나 value 대신에 % s를 사용한다고 가정합니다. –

0
show_field_unless_empty(blog, :body, 'Body') 

다음, _field.html.erb

<p> 
<%= title %>: 
<%= value %> 
</p> 

에서 blog_helper.rb

다음
def show_field_unless_empty(model, field, title) 
    render :partial => 'field', :locals => {:value => model.send(field), :title => title} if model.send(field) 
end 

에서 이것은 나에게 매우 깨끗한 것 같다. 보기에서 다음

# blog_helper.rb 
show_non_blank_field(label, value) 
    "<p>#{label}: #{h value}</p>" if !value.blank? 
end 

과 :

+0

죄송합니다. 실제로 작동하지 않습니다. 그것은 나에게 이전과 같은 가치를 준다. –