0

Rails では、データベースに依存関係を定義する必要はなく、 has_many と 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

これはもったいないと思った…?show メソッドを呼び出すたびに新しいインスタンスを作成するコメント フィールドのようなことをしようとしていますが、これらの「参照」と「add_index」がなければ、コメント行に post_id が格納されていないと思います。

4

3 に答える 3

1

この移行では、post_id を作成し、この列にインデックスを付ける必要があることをデータベースに伝えるだけです (パフォーマンスが向上します)。

t.references :post基本的にはt.integer :post_idそうです、そうです、コメントにpost_idを保存しています。モデルで関係を定義する必要があります。

于 2013-02-12T20:51:03.543 に答える
0

あなたは実際に哲学について間違っています。

Rails マジックは、実際の外部キーによって DB レベルでサポートされている場合にのみ有効です。

ドキュメントはこれを明確に述べています

外部キーに正しく名前を付けると、Rails の魔法が働き、規則を使用して関連付けを把握できるようになります。

于 2013-02-12T20:53:05.760 に答える
0

ORM 内で関係を表現することの何が問題なのか、それが行われるべき場所です。外部キーの制約や関係など、db ベンダーの仕様の間で混乱していると思います。


class Comment < ActiveRecord::Base
  attr_accessible :post, :post_id
  belongs_to :post
end

class Post < ActiveRecord::Base
  has_many :comments
end

class CommentsController < ApplicationController
  def create
    @comment = Comment.create(params[:comment])  # where params[:comment] = {post_id: 1, message: ''}
    @post = comment.post
    respond_with(@comment)
  end
end
于 2013-02-12T20:56:22.257 に答える