2013-04-30 7 views
22

私はRailsのガイドを読んでいたと私は、コードのこれらの行が見つかりました:移行のt.references対モデルのbelongs_to?

class CreateComments < ActiveRecord::Migration 
    def change 
     create_table :comments do |t| 
      t.string :commenter 
      t.text :body 
      t.references :post 

      t.timestamps 
     end 

     add_index :comments, :post_id 
    end 
end 

は私もマイケル・ハートル氏の著書、Railsのチュートリアルを読んで、私は上記のコードで使用される「t.references」については何も見つかりませんでした。 どうしますか?マイケルの本では、モデルではhas_manyとbelongs_to関係を使用し、マイグレーションでは何もしません(イベントt.belongs_toではなく)。

+0

@stackoverflow.com/questions/7788188/what-is-the-difference-between-t-belongs-to-and-t-references-in-railsの可能な複製 – sameers

+0

@sameersは実際にはありません他の人は、モデルにないマイグレーションの中の 'belongs_to'について質問しています –

答えて

26

これはかなり最近のRailsに追加されたものなので、あなたが言及した本ではカバーされないかもしれません。あなたはそれについてRailsガイドのthe migration sectionで読むことができます。

rails generate model Thing name post:references 

あなたが言う、使用して生成

、...あなたのための外部キーフィールドを作成するだけでなく、インデックスが作成されます移行。それは t.referencesの機能です。

あなたは

rails generate model Thing name post_id:integer:index 

を書かれており、同じ最終結果を得ている可能性があります。

+0

しかし、古い方法で外部キーを追加することは可能ですか?(モデルのbelongs_toを使用して) –

+2

それはモデルに外部キーを追加しています。基になるデータベースに転送します。とにかくそれをする必要があります。 'post:references'を使ってモデルを生成すると、ジェネレータは' belongs_to:post'を自動的に追加します。 –

+3

ちなみにマイグレーションでは実際に 'belongs_to'を使用することができます。これは' references'のエイリアスです – MrTheWalrus

5

Railsガイドのthis sectionを参照してください。

t.referencesはテーブルにpost_idという列を作成します。つまり、コメントは投稿に属しているので、Commentモデルでは、belongs_to :postと投稿モデル:has_many :commentsを追加する必要があります。

+0

面白いですが、実際にセクション 't.references'を実際には言及していません。 – Fritzz

関連する問題