2013-07-13 2 views
0

저는 몇 주 후에 같은 회사의 자회사를위한 웹 사이트를 여러 언어로 처리하는 웹 응용 프로그램을 시작할 계획입니다. 프론트 엔드가 다르게 보일 수 있지만, 모두 그 아래에있는 동일한 모델 디자인을 구독합니다.레일 : 동적 필드 프리젠 테이션을 처리하는 보석이 있습니까?

그러나 주요 요구 사항 중 하나는 각 자회사가 모델의 어떤 필드를 웹 사이트에 표시할지 선택할 수 있다는 것입니다.

예를 들어 :이 회사의 두 자회사, 즉 미국과 스웨덴이있는 경우 둘 다 프로그램을 제시 동일한 모델을 사용, 그래서 Program 모델을

class Program < AR 
    attr_accessible :starting_at, :ending_at, :name, :price, :country 
end 

을있다. 그러나 미국 지점은 모든 프로그램이있는 테이블을 보여주고 자하며 각 프로그램에 대해서만 starting_at, ending_at, nameprice을 표시합니다. 스웨덴 지사에서도 동일하게하고 싶지만 ending_at이지만 country으로 표시하고 싶지 않습니다.

또한 웹 인터페이스를 통해 표시 할 필드를 선택할 수 있기를 원합니다. 시간이 지남에 따라 변경 될 수 있기 때문입니다.

많은 메타 모델링이 있었기 때문에 MetaProgram 모델을 생각해 보았습니다. 자회사가 표시되어야하는 필드 등을 보유하고 있습니다.하지만 이렇게하면 ActiveRecord으로 동적 SQL 문을 만들었습니다. 필자는 어떤 필드를 선택해야하는지 선택해야하기 때문에 실제 데이터를 선택하여 프론트 엔드를 통해 표시해야합니다.

더 나은 해결책이 있습니까? 이런 종류의 물건에 따라?

PS : 모호한 제목

+0

위의 설명대로 슈퍼 고급 CMS를 작성해야한다고 생각합니다. –

+0

하지만 같은 결과를 얻으려면 단순히 nil/empty 인 필드를 표시하지 않는 것이 좋습니다. –

+0

후자를 수행 할 수 없으므로 필드가 비어 있지 않으므로. 요약 수준에 표시되지만 상세한 정보 레이블에 표시되는 것은 단순히 원하지 않습니다. 그리고 네, 일종의 슈퍼 CMS입니다 :-) – Vapire

답변

3

이 당신이 찾고있는 정확하게 경우 나도 몰라 죄송합니다.

나는 이것을 위해 ActiveRecord::Store을 사용합니다. 모델에 대한 키/값 저장소와 같습니다.

create_table do |t| 
    t.text :metadata # just a text column, will store serialized hash 
end 

그리고이 같은 모델 :

class Program < ActiveRecord::Base  
    store :metadata, :accessors => [:starting_at, :ending_at] 

    # validate like normal fields 
    validates :starting_at, :presence => true 
end 

그냥 해시 동적 조건 당신을 기반으로 접근 매장을 추가 할 수있는 방법을 찾을 필요가

는이 같은 테이블이 있습니다 귀하의 질문에 언급했다.

저장된 메타 데이터를 인덱싱 할 수없고 쿼리에서 사용할 수없는 단점이 있습니다.

나는이 주제에 대한 멋진 튜토리얼과 설명을 발견했다. here.

+0

감사합니다!제가 확인하겠습니다! 쿼리에 그러한 열이 필요한지 아직 확실하지 않습니다. 하지만이 기능이 Postgres의 HStore 가능성과 결합 될 수 있는지 궁금합니다 ... – Vapire

+0

이 보석은 당신이 찾고있는 것입니다 : https://github.com/diogob/activerecord-postgres-hstore – nico

관련 문제