2012-05-17 4 views
1

여기서 내가 뭘 잘못하고 있니?Rails 모델 사용자 정의 setter/getter 메소드가 실패하는 이유는 무엇입니까?

나는 페이지라고 부르는 앱을위한 모델을 가지고있다. 제목 pagetype에

제목과 pagetype에이 같은 일반적으로 설정할 수 있습니다 PAGE_URL,하지만 난 PAGE_URL에 대한 사용자 정의 게터/세터를 사용 : 그 속성이 있습니다. 여기에 논리/모델 :

class Page < ActiveRecord::Base 

def page_url=() 
    temp = self[:title] 
    pageUrl = temp.gsub(" ", "_").downcase 
if self[:pagetype] == "home" 
     pageUrl = "/" 
    end 
    self[:page_url] = pageUrl 
end 

def page_url 
    self[:page_url] 
end 

end 

그것은 매우 간단합니다 -> PAGE_URL는 않는 PAGE_TYPE로 대체 모든 공백 제목을 기반으로는 == 다음으로 설정됩니다 "홈", "/"로. 레코드를 위해서 나는 그것을 검색 가능해야하고 db에 저장해야하기 때문에 page_url을 가상으로 만들고 싶지 않습니다.

그래서 불행히도 레일즈 콘솔이나 내 응용 프로그램에서이 작업이 실패합니다. 다음은 콘솔에서 setter 메서드를 호출하는 방법입니다. 나는이가 계속하지만

page1 = Page.new 
page1.pagetype = "home" 
page1.title = "this is a test" 

page2 = Page.new 
pager2.pagetype = "content" 
page2.title = "this is another test" 

#expected results should be 
page1.page_url() 
=> "/" 
page2.page_url() 

:

page1.page_url() 
=> nil 

는 도대체 내가 잘못 여기서 뭐하는 거지?

답변

1

이러한 사용자 지정 설정자와 getter는 데이터베이스에 유지되지 않습니다. 데이터베이스에 page_url 열이있는 경우 callback 값을 설정할 수 있습니다. 예 : before_save :

class Page < ActiveRecord::Base 
    before_save :set_page_url 

    def set_page_url 
    if self[:pagetype] == "home" 
     self.page_url = "/" 
    else 
     self.page_url = self[:title].gsub(" ", "_").downcase 
    end 
    end 
end 
+0

정말 고마워요. 정말 감사. – jmtoporek

+0

당신을 진심으로 환영합니다. 기쁜 데 도움이되었습니다. – Mischa

관련 문제