2011-07-13 5 views
1

を返すために、私は2つのテーブルと1 tomany関係を持っている:Railsの3ワンtomany関係の問題 - 次のようにどのように列名値

モデル:

class MediaType < ActiveRecord::Base 
    belongs_to :media 
end 

class Media < ActiveRecord::Base 
    has_many :media_types 
end 

SQLを単純化するためにあります:私はmedia_type_idに関連するメディアレコードを挿入すると

create_table :media do |t| 
    t.string "name", :limit => 255 
    t.integer "media_type_id" 
end 

create_table :media_types do |t| 
    t.string "name", :limit => 255 
end 

、どのように私はメディアレコードに関連media_type.name値を引き戻すのですか?

私は盲目的に試してみました:

media = Media.find(1) 
media.media_type_id.name 

をしかし、それは、もちろん動作しませんでした。私のSQL Railsの標準はおそらく可能ですか?

ありがとうございました。

答えて

2

あなたはアイデア場合:media_typeこのは多くのマスコミがありますが、すべてのメディアは、あなたが他のモデル必要がある唯一の1 media_typeこの

ました:

class MediaType < ActiveRecord::Base 
    has_many :medias 
end 

class Media < ActiveRecord::Base 
    belongs_to :media_type 
end 

そして

media = Media.find(1) 
media.media_type.name 

はあなたが

+0

に名前を与えますご協力いただきありがとうございます!私はまだRaailsに新しいです:) MediaTypeは "has_many:medias"になる必要がありますか?私も "has_many:media"を "s"と試してみましたが、それはうまくいくようです。違いは何ですか? – Slowfib

+0

これは契約書であり、Railsの多くのうちの1つです。 「has_many」や「has_and_belongs_to_many」の場合は、複数の単語が共通している必要があります(ほとんどの場合、単語の最後に 's'が追加されますが、たとえば 'media'がうまく見えません)。 'has_many:subscribers has_many:users has_many:films' しかしhas_many:media Railsコンソールで 'media'.pluralizeと' user'.pluralizeを試してみてください.Railsが単語を複数形にする方法 – warpc

0

has_many media_typesです。

この場合、media_typesテーブルにmedia_idという列を作成しますが、それ以外の方法で作成しました。

その後、MEDIATYPEが属しているメディアを取得するために、メディアが持っているmedia_types、および

media = MediaType.media 

を取得するために

types = Media.media_types 

することにより、各関係に近づきます。

関連する問題