pluginaweek's state_machine gem을 구현 중입니다. 나는이 문제를 더 쉽게 이해할 수 있도록 코드를 축소했다. 이제 난 단지 지금은 하나 개의 상태를 가정 해 봅시다 :state_machine 블록이 사용자 정의 액세서 대신 기본 액세서를 사용하도록하려면 어떻게해야합니까?
이class Event < ActiveRecord::Base
state_machine :status, :initial => :active_offer do
end
def status
'Active Offer'
end
end
새로운 이벤트를 만들 때 내가지고있어 오류가 파종을 통해 또는 브라우저가 {:status=>["is invalid"]}
입니다 통해 두 객체.
모든 다른 상태에 대한 조건을 포함하고보기에 사용자 지정 문자열을 반환 할 계획입니다. 전체 프로젝트의 뷰는 현재 .status
구문을 사용하므로 원활하게 설치하려고합니다. 나는 API 문서를 읽고에 따라이 솔루션을 시작 :
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Overwriting+default+accessors
이 내 주요 목표이다 : 나는 그것이를 얻을 수 있도록 state_machine 블록이 정상 접근을 사용하기 위해 할 수있는 일
def status
if read_attribute(:status) == 'active_offer' && self.start_date > Time.now
'Active Offer'
elsif read_attribute(:status) == 'active_offer' && self.start_date < Time.now
'Expired'
else read_attribute(:status) == 'cancelled'
'Cancelled'
end
end
데이터베이스 값?
특효약 해결 방법 :
내 주요 문제는 접근이 status
을 무시했다. state_machine 코드가 실행 중일 때 접근 자 오버라이드를 통해 현재 상태를 읽었으므로 잘못된 상태 인 맞춤 문자열이 리턴되었습니다. 나는 state_machine use : state를 만들어야 만했다. 나는 원래 이렇게 했었습니다. 왜냐하면 나는 이미 주와 같은 주에 대한 attr을 가지고 있었기 때문에 그것을 address_state로 옮겼습니다.
class Event < ActiveRecord::Base
state_machine :status, :initial => :active_offer do
end
def active_offer
'Active Offer'
end
end
는 편집이 : 나는 내가 할 수 없습니다 확신하는, 제대로 이해하면
,이 작동합니다
죄송합니다. 처음으로 사람들이 내 주요 목표를 이해할 수 있도록 충분한 정보를 제공하지 않았습니다. 가능하다면 편집 내용을 검토하십시오. 솔루션을 변경하여 '상태'로 유지할 수 있습니다. 감사. – RudyOnRails
자동으로 실행 되길 원하거나 버튼이나 이와 유사한 방법으로 이러한 메소드를 실행하고 싶습니까? –
단추가 없습니다. 지금 당장은 이벤트 색인을 가지고 있다고 해. 인덱스 뷰의 이벤트 테이블에있는 열 중 하나가 상태입니다. 그래서 저는이 코드를 동일하게 유지하고 모델에서 얻은 것을 편집하고 싶습니다. – RudyOnRails