2014-06-14 4 views
0

내 모델은 Ticket, Staff, Post입니다.레일 시도 방법

티켓은 직원 belongs_to
직원 has_many 게시물

나는 티켓 인스턴스 @ticket 있습니다.
티켓과 관련된 모든 게시물을 렌더링하고 싶습니다.
관련 게시물이없는 경우 "No posts available"메시지가 표시됩니다.

if @ticket.staff and @ticket.staff.posts 
    render @ticket.staff.posts 
else 
    There are no answers available 

그러나 좀 더 깔끔하게에게 뭔가를하고 싶습니다
내 버전은 매우 상세하다. 그것은 나에게 오류 '전무'를 제공

= render(@ticket.staff.try(:post).any?) || "There are no answers available" 

는 ActiveModel 호환 개체가 아닙니다. to_partial_path를 구현해야합니다.

아이디어가 있으십니까? 티켓 모델에서

답변

1

당신은 '위임'컨트롤러에서

delegate :posts, to: :staff, allow_nil: true 

는 인스턴스 변수를 만들 수 있습니다.

@posts = ticket.posts 

그리고보기에

-if @post.present? 
    =render @posts 
-else 
    There are no answers available 
+0

당신은 내 버전보다 더 자세한 생각하지 않아? –

+0

글쎄, 난간에 가독성에 관한 것입니다. 때로 가독성은 그다지 장황하지는 않지만이 경우 Demeter의 법칙을 준수하고 뷰 요소 만보기, 컨트롤러의 컨트롤러 요소 등을 의미합니다. 결국 코드에서 볼 때보기가 더 간단합니다. 그리고 다른 곳에서 ticket.posts를 사용하게 될 것이므로 나중에 전체 프로젝트의 정보를 간결하게 만듭니다. – sonnyhe2002

관련 문제