2012-03-31 14 views
0

のRailsの子供たちのダイナミックなセットと同様に、いくつかのテストモデルを含み、多くのマシン
マシンが等</p> <p>ユーザーが持っているのTest1、Test2を、Test3は名前の私は、ユーザーおよびマシンデータモデルとRailsアプリケーションを持っている

マシンが
テストは、私は、ユーザーが利用可能なテストのいずれかのセットが含まれ、マシンのレポートのテンプレートを作成することができるようにしたいマシン

に属している多くのテストを持っているユーザーに属しています。

たとえば、テスト1、3、4、7などしか含まれない "My Machine Report"というテンプレートをユーザーが作成できるようにしたいとします。Machine> Showページには子のみが表示されますテスト番号1,3,4,7など

誰かがこれを管理するデータモデルを作成する方法についての提案はありますか?私は使用可能なテストごとにブール値を含むTemplatesという新しいモデルを作成することを考えています。次に、適切な入力フィールドと結果を、[テンプレート]モデルでどの値がTrueに設定されているかに基づいて表示ページに表示できます。

これは私の目標に達する良い方法ですか?

答えて

1

テンプレートモデルでは動作していますが、テストごとにテンプレートテーブルに異なる列を設定する必要はありません。あなたが記述したのは、レールとhas_many :throughの関連付けによって処理されるテンプレートとテストの多対多の関係です。

class Template < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :machine 
    has_many :testing_templates 
    has_many :tests, :through => :testing_templates 
end 

class TestingTemplate < ActiveRecord::Base 
    belongs_to :template 
    belongs_to :test 
end 

class Test < ActiveRecord::Base 
    has_many :testing_templates 
    has_many :templates, :through => :testing_templates 
end 
+0

おかげアダム:私の推測では、あなたのモデルは次のようになりますです。これは非常に便利です。私はhas_many:through associationのことを聞いていなかった。私はそれを撃つだろう。 しかし、1つの質問。上記の例では、Testクラスで宣言する必要はありません。 belongs_to:testing_template ? –

+0

間違いなく。それが助けてくれてうれしい。私の例では、TestとTestingTemplateの間の関連付けは、has_many:testing_templatesによってカバーされています。私はbelongs_to:testing_templateの代わりにこれを行いました。belongs_to関係では、各テストが1つのTestingTemplateしか持たないと想定していたので、私は真実ではないと思います。検証の方法として、すべて同じテストを含む複数のテンプレートを作成できますか?そうであれば、has_manyは使用する関連付けです。ただし、各テストを1つのテンプレートでしか使用できない場合は、belongs_toがより適切な関係になります。 – Adam

+0

そして、実際には、結合テーブル(testing_templates)を持つ必要はありません。テンプレートhave_many:tests、およびテストbelongs_to:templatesだけを宣言できます。あなたが元の質問を表現する方法に基づいて、私はあなたが結合テーブルを望むと思う。 – Adam

関連する問題