2010-06-04 3 views
0

는 내가보기에 다음과 같습니다모델에서 뷰 또는 스코프에 논리를 삽입하려면 어떻게합니까?

  <% unless contact_email.statuses.empty?%> 
       (<%= contact_email.statuses.find(:last).status%>) 
      <% end %> 

CONTACT_EMAIL 특정 모델의 인스턴스입니다.

이렇게 할 수 있습니까?

class ContactEmail < ActiveRecord::Base 
    attr_accessible :contact_id, :email_id, :status, :subject, :body, :date_created, :date_sent 

    def status 
    unless contact_email.statuses.empty? 
     contact_email.statuses.find(:last).status 
    end 
    end 

end 

이 할 수있는 더 좋은 방법은 무엇입니까? 거기에 사용할 수있는 방법이 있습니까? 비어있는 경우 기본값에 대한 연산자?

<% = contact_email.status =>

값이 있다면하지 않을 경우 다음을 표시 쇼 :

기본적으로, 내가보기에 다음을 수행 할 수 있도록하고 싶습니다 아무것도.

답변

1

내가 바꿀 것이

def status 
    unless contact_email.statuses.empty? 
    contact_email.statuses.find(:last).status 
    end 
end 

def status 
    return if statuses.empty? 
    statuses.find(:last).status 
end 

이렇게하면 메서드를보다 명확하고 이해하기 쉬워야합니다. 당신이

<%= contact_email.status => 
+0

그렇게을 따르지 않는 한 생각 호출 할 수 있습니다 statuses.empty이면 반환 하시겠습니까? 비어있는 경우 상태 메서드에서 반환된다는 의미입니까? – Angela

+0

예, status 메소드는'statuses.empty?'가 없으면 nil을 반환하고 그렇지 않으면 메소드의 마지막 명령문 인 마지막 상태를 반환합니다 – nas

0

직접

<%= contact_email.statuses.find(:last).status unless contact_email.statuses.empty? %> 

또는

#I change methodname as it looks more meaningful 
def last_status 
    (self.statuses.empty?)? "defalut string if you want" : self.statuses.find(:last).status 
end 

을 다음 사용하고 난 당신이 요구하는지 모르겠어요

<%= contact_email.last_status %> 
+0

을 원하는

지금보기에 당신은 내가 그녀가보기에 그 일을하기 때문에 모델에 넣을 수 있는지 묻고 더러워 보이는 MVC – corroded

0

처럼보기에서 호출 할 수 있습니다. 검사를 통해 여기에 게시 한 코드가 원하는대로 수행 될 것 같지만 실행하고 알아낼 수는 없습니까? 우리는 전체 코드베이스 또는 스키마가없는,하지만 당신은 (희망)을 수행 P

<%= x %>x.to_s의 값을 출력하고 nil.to_s은 빈 문자열입니다. 위에서 정의한 ContactEmail#status 메서드는 마지막 상태 (있는 경우)를 반환하고 그렇지 않으면 nil을 반환합니다. 그래서 네, 당신이 쓴 것은 당신이 원하는대로 할 것입니다.

(모델)에 대해 어떻게 하나가없는 경우에는 기본 상태를 제공하려면 :

def last_status 
    unless contact_email.statuses.empty? 
    contact_email.statuses.find(:last).status 
    end 
end 

def status 
    last_status || DEFAULT_STATUS 
end 

DEFAULT_STATUS = "Hello world!" 
관련 문제