value
및 display_value
열이있는 다형 lookups
테이블이 있습니다. HTML select
양식 요소가 작동하는 것과 마찬가지로 value
은 DB에 저장되는 내용이고 display_value
은 화면에 표시되는 내용으로 "꽤"보이게합니다.레일 4 : 조회 값 표시
display_value
이없는 경우 조회의 기본값은 value
입니다. 그렇게하면 코드에서 항상 display_value
을 사용할 수 있지만 nil
오류가 발생하지만 실제로는 value
만 DB에 필요합니다.
다음 코드는이 문제를 해결하지만 이와 같이 간단한 "약간 자세한"것으로 보입니다. Ruby/Rails를 더 명확하고 간결하게 코딩하여 아직 의도를 전달하는 방법이 있습니까? 이 약으로 분명하다
read_attribute(:display_value) || value
# models/lookup.rb
class Lookup < ActiveRecord::Base
validates :type, presence: true
validates :value, presence: true
# If display_value present, display it or default to value
def display_value
value_to_display = read_attribute(:display_value)
if value_to_display.blank?
value
else
value_to_display
end
end
end
갱신 2014년 12월 29일 11시
나는이 질문 불과 몇 분 후에 그것은 나를 때리는 ... 그리고 내가 생각할 수있는 것처럼 간결하게. 이보다 더 좋은 해결책이 있습니까? 당신이 무엇을
DB에 display_value를 저장하는 이유는 화면의 텍스트를 사용자가 변경할 수 있기 때문에 로직 비하인드가 변경되지 않기 때문입니다. 예를 들어, 사용자는 화면에서 "관리자"대신 "관리자"를보고 싶지만 코드의 논리는 동일합니다. 그것들을 키/값으로 저장하는 것은 실행 가능한 옵션이지만 코드 푸시 (DB 레코드 업데이트)없이 display_value를 변경할 수있는 유연성이 필요합니다.필자는 데코레이터에 익숙하지만 display_value는 레코드 자체와 밀접하게 연결되어 있으므로 실제 열 값이므로 모델에 보관해야합니다. –