【发布时间】:2012-09-25 04:41:33
【问题描述】:
我有以下:has_many :through 关系。
协会
class Profile < ActiveRecord::Base
has_many :teams
has_many :projects, :class_name => "Project", :through => :teams
has_many :leads, :class_name => "Projects"
class Project < ActiveRecord::Base
has_many :teams
has_many :developers, :class_name => "Profile", :through => :teams
belongs_to :lead, :class_name => "Profile", :foreign_key => "developer_lead"
class Team < ActiveRecord::Base
belongs_to :developer, :class_name => "Profile"
belongs_to :project
当我尝试获取 Profiles 项目时,该关系未使用团队表中的正确键。
Rails C
1.9.3p194 :001 > Profile.first.projects
配置文件加载 (0.2 毫秒) SELECT "profiles".* FROM "profiles" LIMIT 1
项目负载 (0.2ms) SELECT "projects".* FROM "projects" INNER JOIN "teams" ON "projects"."id" = "teams"."project_id" WHERE "teams"."profile_id" = 1
应该是"teams"."developer_id" = 1
我尝试在 Profile 和 Project 模型中使用 :foreign_key => "developer_id",但似乎没有任何效果。
我觉得我对模型所做的更改没有产生任何影响,但每次更改后我都在重新启动 rails 控制台。
架构
create_table "profiles", :force => true do |t|
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "projects", :force => true do |t|
t.integer "developer_lead"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "teams", :id => false, :force => true do |t|
t.integer "developer_id"
t.integer "project_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
【问题讨论】:
-
:foreign_key => "developer_id"属于has_many :teams。这会生成什么 SQL? -
啊,太好了,成功了。 SQL:
SELECT "projects".* FROM "projects" INNER JOIN "teams" ON "projects"."id" = "teams"."project_id" WHERE "teams"."developer_id" = 1。如果你把它扔在一个答案中,我会接受它。
标签: ruby-on-rails foreign-key-relationship has-many-through