1

私は、プロジェクトが 1 人の所有者 (ユーザー) に属し、多くのメンバー (ユーザー) に属しているアプリを持っています。

これらの関連付けを処理するために、モデルに次のコードを設定しました。プロジェクトのデータベースには owner_id がありますが、member_id はありません。

プロジェクト モデル コード

attr_accessible :description, :name, :owner_id, :avatar_url

belongs_to :owner, foreign_key: :owner_id, class_name: "User"
has_and_belongs_to_many :members, class_name: "User"

ユーザーモデルコード

has_and_belongs_to_many :projects
has_many :owned_projects, class_name: "Project", foreign_key: "owner_id"
has_many :associated_projects, class_name: "Project", foreign_key: "member_id"

特定のプロジェクトで、p.owner を呼び出すことはできますが、p.members を呼び出すことはできません。そして、ユーザーの場合、u.owned_projects または u.projects を呼び出すことができますが、u.associated_projects を呼び出すことはできません。

これらのコマンドを試すと、次のエラーが表示されます

1.9.3p194 :003 > p.members
User Load (0.2ms)  SELECT "users".* FROM "users" INNER JOIN "projects_users" ON "users"."id" = "projects_users"."user_id" WHERE "projects_users"."project_id" = 3
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: projects_users: SELECT "users".* FROM "users" INNER JOIN "projects_users" ON "users"."id" = "projects_users"."user_id" WHERE "projects_users"."project_id" = 3

1.9.3p194 :007 > ryan.associated_projects
Project Load (0.2ms)  SELECT "projects".* FROM "projects" WHERE "projects"."member_id" = 14593
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: projects.member_id: SELECT "projects".* FROM "projects"  WHERE "projects"."member_id" = 14593

これらのモデルを設定して、意図したとおりに動作させるにはどうすればよいですか?

注: コードを次のようにモデル化しました -同じモデル間の 2 つの has_many リンクですが、役に立ちませんでした。

4

1 に答える 1

0

User モデルと Project モデルに has_many_and_belongs_to 関係が必要です。また、間に中間テーブルが必要です。http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association

Class Project < ActiveRecord::Base

     attr_accessible :description, :name, :owner_id, :avatar_url

     belongs_to :owner, foreign_key: :owner_id, class_name: "User"
     has_and_belongs_to_many :members, class_name: "User"

end

Class User < ActiveRecord::Base

     has_and_belongs_to_many :projects
     has_many :owned_projects, class_name: "Project", foreign_key: "owner_id"

end

前述のように、メンバー Project と User(member) の間に中間テーブルが必要です。プロジェクトメンバーを表示しようとしたときにそのエラーが発生しました: no such table: projects_users

Projects_Users Table
user_id | project_id
于 2013-03-17T10:54:26.423 に答える