2013-02-06 1 views
0

name, rating1, rating2 및 rating3을 포함해야하는 html 테이블을 작성 중입니다. 등급 1-3은 이름이 아닌 다른 모델에서 제공됩니다.레일 3은 모두 nil 값을 무시합니다.

resources :names do 
    resource :rat1,:rat2,:rat3 
end 

내 HTML 테이블의 내부 나는이 각 테이블 내에서 등급을 포함하고 싶지만 나는 자동으로 건너 또는 전무 테이블을 무시하고 싶습니다. 그 이유는 다음과 같습니다. 이름은 : rat1 및 a : rat2 또는 : rat3 만 가질 수 있습니다. 내 견해가 이렇게 보일 것입니다. 그 중 하나.) N/A로 값을 대체합니다 또는 b.)는이 필드를 비워하고 다음에 이동 전무 것을 제외하고

<table> 
     <thead>Name</thead> 
     <thead>Rating 1</thead> 
     <thead>Rating 2</thead> 
     <thead>Rating 3</thead> 
     <% @names.each do |name| %> 
     <tr> 
      <td><%= name.nametext %></td> 
      <td><%= name.rat1.rating %></td> 
      <td><%= name.rat2.rating %></td> 
      <td><%= name.rat3.rating %></td> 
     </tr> 
     <% end %> 
    </table> 

는 name.rat1 인 경우.

가장 손쉬운 방법은 무엇입니까?

:: UPDATE :

그래서 내 문제는 name.rat1이 전무하고 name.rat1.rating이 같은 정의되지 않은 방법을 던질 것이다 이러한 옵션을 모두 그래서 전무 클래스의 정의되지 않은 방법이다 |에 관계없이 nil 클래스 오류가 발생했습니다. 또는 도우미 방법. 적어도 내 현재 테스트가 보여주는 것. 다른 옵션은 없습니까? 또는 다른 해결 방법? 나는 모든 rat1-3에 대해 이와 같은 검증 루프를 넣지 않아야한다.

<% unless name.rat1.nil? %> 
    <%= name.rat1.rating %> 
<% end %> 

더 간단한 방법이 있어야한다.

답변

3

논외 귀하의 테이블 구조가 잘못되었습니다.

<table> 
    <thead> 
    <tr> 
     <th>Name</th> 
     <th>Rating 1</th> 
     <th>Rating 2</th> 
     <th>Rating 3</th> 
    </tr> 
    </thead> 
    <tbody> 
    <% @names.each do |name| %> 
    <tr> 
     <td><%= name.nametext %></td> 
     <td><%= name.rat1.rating || 'N/A' %></td> 
     <td><%= name.rat2.rating || 'N/A' %></td> 
     <td><%= name.rat3.rating || 'N/A' %></td> 
    </tr> 
    <% end %> 
    </tbody> 
</table> 
+0

도움을 주셔서 감사합니다. 참으로 구조는 올바르게 행해지 지 않았습니다. 실제로 내 코드의 일부가 아닙니다. 나는 단순화 된 예제를 원했다. 함께 버려졌습니다. – capcode01

+0

감사합니다. 나는 당신이 알고있을 수 있도록 그것을 지적하고 싶었습니다. :) –

5

은 아마 그런

def show_rating(rating) 
    if rating.present? 
    rating 
    else 
    "default value" 
    end 
end 

names_helper.rb

에 도우미 메서드를 만들 뷰에서 사용할 것 :

<%= show_rating name.rat1.rating %> 
+0

중대한 제안 :로 평가 값을 렌더링하는 동안 너무 <thead><tr><th>Name</th><th>Rating1</th>..so on..</tr></thead>

이 있어야합니다, 귀하의 경우에는 조건을 사용할 수 있습니다! 나는이 개념을 한동안 춤추고 있었다고 생각합니다. 이것은 상당히 단순화 할 것입니다. – capcode01

+0

xml.tag 안에 넣고 싶다면! 이렇게'xml.tag! ("cell", show_rating (name.rat1.rating))'이것이 효과가 있으리라 생각하십니까? 노력할 때가 아닌 것 같습니다. – capcode01

+0

이것을 여러 장소 (보기, 컨트롤러, 모델, 빌더 등)에서 사용하려는 경우 모델 방법을 고려할 수 있습니다. – blamattina

관련 문제