2010-11-30 8 views
2

私は、コンテンツを管理するために構築している単純なアプリケーションでデータを構造化する方法について以前に質問しました。答えはSingle Table Inheritanceを見ることでした、そして、それはチケットになると思います。:[タイプ]フィールドはどのようにシングルテーブル継承に設定されますか?

私はいくつかの例を読んだことがありますが、常に欠落しているようなものは、:typeカラムが実際にどのように設定されているかです。ユーザーがタイプを選択できるようにドロップダウンしたフォームフィールドを含めるのですか?

私はSTIが現在どのように動作しているか(型フィールドはクラス名を取る)を完全に理解していると信じていますが、まだ非常に基本的なものが欠けています。誰かが私を埋めることができますか?

私はそうのようなコンテンツテーブルを持っている:

id 
type 
name 
desc 

、さまざまなタイプは、「写真」、「ブログ」、「サイト」になります。

答えて

6

のコンテンツに「サイト」、「ブログ」、「写真」の情報がすべて格納されていると推測します。 Content.newでオブジェクトを開始すると、タイプフィールドに値が割り当てられていません。

しかし、あなたが実際にそれが自動的にMODEL_NAMEを割り当て Site.newまたはSite.createバイ・「コンテンツ」モデルから継承されている「サイト」から任意のクラス、「ブログ」や「写真」を開始した場合(これはSiteを小文字は区別して)タイプフィールドで

同様にBlog.newを行う場合はのブログをタイプカラムに割り当てます。

+0

基本的にSTIの訪問についての詳細をお知りになりたい場合は、:あなたは* *サブクラスの1のオブジェクトを保存するときにタイプフィールドが自動的に入力されます。スーパークラス(あなたの場合はコンテンツ)を保存すると、それは私が思っていないまま残るはずです。 –

+0

@Paulあなたは正しい軌道に乗っています:-) –

1

@jyoseph、はいあなたは間違いありません。 "Site"、 "Blog"、 "Photo"では、タイプを保持する新しいビューと編集ビューをドロップダウンリストに追加できます。あなたの内容で、その後

def content_type 
    return ["Site", "Blog", "Photo"] 
end 

とを次のようにまた、あなたのアプリケーションのヘルパーファイルにヘルパーを作ることができます/ new.html.erbあなたは

<p> 
    <%= f.label :type %><br /> 
    <%= f.select :type, content_type %> 
</p> 

が、これはうまくいくかもしれない、それを試してみ行うことができます。

は、念のために誰もがmy Blog

関連する問題