0

私は Michael Hartl のチュートリアルを使用しており、ユーザーがレシピを投稿できるようにするために、「レシピ」と呼ばれる新しいモデルを作成しようとしています。このモデルは、ユーザーが多くのレシピを投稿でき、すべてのレシピが 1 人のユーザーにリンクされている必要があるという点で、基本的にマイクロポスト モデルと同じです。したがって、マイクロポストと同じコマンドと移行を使用しました。

class CreateMicroposts < ActiveRecord::Migration
  def change
    create_table :microposts do |t|
      t.string :content
      t.integer :user_id

      t.timestamps
    end

    add_index :microposts, [:user_id, :created_at]
  end
end

次のコマンドを使用して作成: rails generate model Micropost content:string user_id:integer

私が抱えている問題は、両方のテーブルの主キーが user_id であることです。これは機能しますか、それともレシピを入力しようとすると、代わりにマイクロポスト テーブルから取得しようとしますか? 前もって感謝します

4

2 に答える 2

0

レシピを入力しようとすると、代わりにマイクロポスト テーブルから取得しようとしますか?

いいえ。デフォルトでは、アプリケーション内のモデルはデータベース内のテーブルRecipeとやり取りします。recipes同様に、モデルはデフォルトでデータベース内のテーブルMicropostと対話します。microposts

Recipeモデルを操作している限り、 のインスタンスはテーブルRecipeからプルされません。microposts

テーブルの主キーが何のためにあるのか、そしておそらくデータベース テーブルがどのように機能するのかについて、根本的な誤解があるようです。しかし今のところ、それはこの質問の範囲外です。


余談ですが、おそらくやるべきだったでしょう

rails generate model MicroPost content:string user_id:integer

( の大文字Pに注意してくださいMicroPost)。これはクラスのより適切な名前でありmicro_posts、データベースにテーブルを作成します。

于 2012-12-06T15:03:42.160 に答える
0

主キーは、2 つのテーブルのいずれにおいても user_id ではありません。各モデルは、PK として使用される暗黙的な数値自動インクリメント id 列を持つテーブルを生成します。

add_index が行うことは、user_id 列にインデックスを追加することです。インデックスは PK ではありません。

とにかく、レシピの移行で add_index ステートメントを次のように変更する必要があります。

add_index :recipes, [:user_id, :created_at]
于 2012-12-06T15:04:14.827 に答える