1

このタイプの関係の移行を作成する方法を一晩で完全に忘れました。

私にはプロジェクトテーブルとユーザーテーブルがあり、各ユーザーには独自のプロジェクトがあり、プロジェクトの作成時または編集時にユーザーが作成したプロジェクトを共有する方法をユーザーが作成するため、リレーションシップは次のようになります。

各プロジェクトには多くのユーザーがいて、ユーザーに属していますが、各ユーザーには多くのプロジェクトがあり、プロジェクトに属しています。

問題?

この関係を規定するために新しいテーブルを作成する必要があると言われたので、これから移行する方法がわかりません>。>。

私が考えていた

generate migration project_user project_id :int user_id :int

それはどこで正しいですか?

4

1 に答える 1

4

users、projects、project_editor_links の合計 3 つのテーブルが必要です。

あなたの移行:

create_table :users do |t|
  # user stuff
end

create_table :projects do |t|
  t.references :user
  # project stuff
end

create_table :project_editor_links |t|
  t.references :user
  t.references :project
end    

コマンドラインから最後のテーブルを生成するには:

rails g migration project_editor_links project:references user:references

モデルは次のようになります。

class User < ActiveRecord::Base
  has_many :projects
  has_many :project_editor_links
  has_many :edited_projects, :through => :project_editor_links
end

class Project < ActiveRecord::Base
  belongs_to :user
  has_many :project_editor_links
  has_many :editors, :through => :project_editor_links
end

class ProjectEditorLinks < ActiveRecord::Base
  belongs_to :editor, :class_name => 'User', :foreign_key => :user_id
  belongs_to :edited_project, :class_name => 'Project', :foreign_key => :project_id
end
于 2012-11-21T21:37:51.227 に答える