나는 이전에 hstore
을 사용했지만 사용자가 질문에서 제공 한 문서를 연구했습니다. 글쎄, hstore
은 정말 유용합니다 (너무 좋지는 않지만 postgreSQL DB에서만 사용 가능하지만 새로운 것을 배웠습니다). 설명서를 읽기에서
,
주 - hstore 또는 JSON 같은 PostgreSQL을에게 특정 열을 사용하는 경우 상점에서 제공하는 직렬화 필요가 없습니다. 단순히 대신 액세스 메소드를 생성하기 위해 store_accessor를 사용하십시오. 이러한 열은 문자열 키순 해시를 사용하며 기호를 사용하여 액세스를 허용하지 않습니다. 또한
는 :
저장된 속성 이름 stored_attributes를 사용하여 검색 될 수있다.
User.stored_attributes[:settings] # [:color, :homepage]
그래서, 우리는
stored_attribute
사용
stored_attributes
해시에 별도의 필드를 받고있을 것이며, 우리가 배열로
stored_attribute
에 선언 된 필드를 받고있을 것입니다. 이제 배열의 모든 요소에 대한 접근자를 재정의해야합니다.
define_method을 사용하여 접근자를 동적으로 재정의 할 수 있습니다. 이것이 내가 생각해내는 것입니다.
class WorkingBill < ActiveRecord::Base
store_accessor :prices, :cost_price, :selling_price
stored_attributes[:prices].each do |price_column_name|
define_method("#{key}=") do |value|
super(value.to_f)
end
define_method(key) do
super.to_f
end
end
end
저는 지금 개발 환경이 없으므로이 코드를 테스트하지 않았습니다. 또한 super
전화가 define_method
내부에서 작동하는지 의심 스럽습니다. 그래서, 그냥 시도해보십시오. 개발 환경을 얻은 후에도 테스트 해 보겠습니다.
또한 @Vakily 주석으로, 보석 https://github.com/jalkoby/active_store_accessor이 더 잘하는 것으로 보이며 부울, 정수 필드도 처리합니다.
유용 할 수도 있습니다. https://github.com/jalkoby/active_store_accessor – Vakiliy
감사합니다. Vakiliy - 귀하의 보석이 훌륭하게 작동합니다.이 응용 프로그램에 필요한 것보다 조금 더 큽니다. – l85m