2010-07-08 3 views
2

게시물 작성자의 이름을 표시하고 싶습니다. <% @post.author.name %>은 작성자가 nil이 아닌 경우 작동합니다. 따라서 unless @post.author.nil?을 사용하거나 <% @post.author_name %>처럼 nil을 검사하는 author_name 메서드를 추가하십시오. 후자는 피하려고합니다.보기에서 nil 처리 (예 : @ post.author.name의 작성자 없음)

값이 있는지 없는지에 따라 단어를 추가/제거해야 할 수도 있습니다. 예를 들어, "Posted on 1/2/3 by"는 단순히 nil을 표시하면 내용이됩니다. 나는 저자가 없다면 "by"을 제거해야합니다.

+0

값이 있는지 없는지에 따라 단어를 추가/제거해야 할 수도 있습니다. 예를 들어 "Posted on 1/2/3 by"는 단순히 nil을 표시하면 내용이됩니다. 작성자가 무효 인 경우 'by'을 제거해야합니다. – Raynard

답변

3

당신은 try를 사용할 수 있습니다

<%= @post.author.try(:name) %> 

그것이 nil이 아닌 경우 @post.authorname 메소드를 호출하려고합니다. 그렇지 않으면 nil을 리턴하고 예외는 발생하지 않습니다. 두 번째 질문에


답변 : 원칙적으로은 다음 아무 문제가 없다 :

<% if @post.author %> 
    written by <%= @post.author.name %> 
<% end %> 

또는

<%= "written by #{@post.author.name}" if @post.author %> 

하지만이 반복되는 패턴이있는 경우, 당신은 수도

그것을위한 도우미 메서드를 작성하고 싶습니다.

# app/helpers/authors_helper.rb or app/helpers/people_helper.rb 
class AuthorsHelper 
    def written_by(author) 
    "written by #{author.name}" if author 
    end 
end 

# in your views 
<%= written_by(@post.author) %> 
+0

사용할 수 없지만 (추가 한 주석 참조) 유용 할 것입니다. 감사합니다! – Raynard

0

어떤 변수를 받아들이는 방법을 작성하고 먼저 누드인지 확인하고 표시되지 않는지 확인합니다. 그런 다음 하나의 메소드 만 작성하면됩니다.

6

Null object pattern이 문제를 피하는 하나의 방법입니다. 수업 중 :

def author 
    super || build_author 
end 

이렇게하면 빈 작성자가 표시됩니다. 그러나 실제로는 nil을 기대할 때 실제로 빈 객체를 갖고 싶지 않으므로 어떤 종류의 발표자를 사용할 수 있습니다. 당신이 익숙해 질 수있는 경우

class PostPresenter 
    def initialize(post) 
    @post = post 
    end 

    def post_author 
    (@post.author && @post.author.name) || 'Anonymous' 
    end 
end 

또 다른 방법은, @post.author.try(:name) 같이 try을 사용하고 있습니다.

0

비슷한 상황을 자주 경험 했으므로 흥미로운 질문을 발견하여 첫 번째 Rails 플러그인을 시험해 보려고했습니다.

아직 시험을 치르지 않았지만 시험해 볼 수는 있습니다. http://github.com/reubenmallaby/acts_as_nothing (Ruby 1.9.1을 사용하고 있습니다. 의견이나 Github에 문제가 있으면 알려주세요.)