2016-06-01 3 views
0

いくつかのRailsモデルを構造化して、さまざまな数の入力フィールドをサポートできるようにするにはどうすればよいでしょうか。さまざまなフィールド数を持つオブジェクトをサポートするためのモデル構造体

私は、テーマモデルに属している記事モデルを持っているとしましょう。私はいくつのテーマを持っていたいと思いますし、それぞれのテーマがそれ自身のフィールドを定義できるようにしたいと思います。例えば、theme_1はprimary_colourを定義し、theme_2はcolour_1、colour_2、fontを定義します。

テーマの選択は、記事がテーマを適切に適用できるようにするためにどのような追加情報を収集する必要があるかを決定します。

article_1がtheme_1を使用している場合は、article_1を表示するたびにprimary_color値を保存する必要があります。 article_2でもtheme_1を使用している場合は、別のprimary_color値を定義できます。同様に、article_3がtheme_2を使用する場合は、color_1、color_2、およびfontを保存する必要があります。

テーマは必須フィールドを定義します。必要な値は記事固有のものです。

は、これまでのところ私は、次が、イム自信がないの最善の解決策が出ている:

class Article < ActiveRecord::Base 
    belongs_to :theme 
    has_many :article_details 
end 

class Theme < ActiveRecord::Base 
    has_many :fields 
end 

class ArticleDetail < ActiveRecord::Base 
    belongs_to :field 
    belongs_to :listing 
end 

記事は、テーマを持っていると私は私がのために移入するために必要なものフィールドを知っているので、テーマは、フィールドがあります記事。記事には、値を格納するarticle_detailsと、その値が使用するフィールドへの参照もあります。

私は説明を明確にしたいと思います。どんなフィードバックもありがとうございます。

おかげ

+0

これには多くの方法があります。最良の選択は、主に次の内容に依存します: 1.あなたが想像しているテーマの数は です。2.あなたのテーマにアクセスする方法や更新する方法(具体的には、青色の原色を持つ記事をすべて検索するそのテーマが何であるか把握する必要がありますか?) – Julie

+0

@Julie - 議論のために、5-15テーマを考えましょうが、テーマの柔軟性を制限しないように分割したいと考えました。私は原色の青色の記事をすべて見つけようとは考えていません。テーマを簡単に「適用」できるようにしたい。したがって、article_1にprimary_colorの青が付いている場合は、primary_color変数を指定したいと思うtheme_1のCSSがあるかもしれません。 – adampetrie

答えて

0

がある潜在的なテーマのほんの一握り以上であり、あなたが必要なフィールドに基づいて、クエリの更新を行うことを計画していないことを考えると、私は、ハッシュされたカラムを使用してお勧めします。したがって、このような何か:

class Article < ActiveRecord::Base # Columns on the articles table include: # Indexed string called 'theme' # text column (not string!) called 'fields' serialize :fields
end

次に、あなたのような何かを行うことができるようになります: a = Article.new a.fields = {color1: 'blue', color2: 'red', fontFamily: 'Verdana'} a.save

+0

答えをありがとう。私がこのルートに行くと、私は必要が生じたときにフィールドを照会する能力が制限されます。 私は記事を多相関連としてテーマを設定できるかどうか疑問に思っています。 ArticleThameなどのテーマhas_oneのようなものか? – adampetrie

0

私は上-考えて、このソリューションをだったと思います。

article = Article.new 
article.theme = MyTheme.new(primary_color: 'blue') 
article.save 
article.theme.primary_color 
=> 'blue' 
:もしこの時点で

class CreateArticles < ActiveRecord::Migration 
    def change 
    create_table :articles do |t| 
     t.references :theme, polymorphic: true, index: true 
    end 
    end 
end 

class Article < ActiveRecord::Base 
    belongs_to :theme, polymorphic: true 
end 

class MyTheme < ActiveRecord::Base 
    has_one :article 
end 

MyThemeprimary_colorが、私はこのような何かを行うことができます定義されています。記事は、テーマにポリモーフィックな関連を持っている場合、私は、フィールドの私たち自身のセットをそれぞれがn個のテーマを定義することができます

私が探していたものは、とにかく当時のものだった。

関連する問題