当外键不是 ID 时关联不起作用
Association not working when foreign key other than ID
我有两个 table:
1.advertiser_accounts
create table if not exists advertiser_accounts (
advertiser_id int(11) not null,
deal_type_id int(11) not null,
primary key (advertiser_id),
CONSTRAINT account_advertiser_refs FOREIGN KEY (advertiser_id) REFERENCES advertisers (ap_advertiser_id ),
CONSTRAINT deal_types_refs FOREIGN KEY (deal_type_id) REFERENCES deal_types (id)
);
2。广告商
Advertiser(id: integer, ap_advertiser_id: integer)
模型中:
AdvertiserAccount
class AdvertiserAccount < ActiveRecord::Base
belong_to :advertiser
end
广告商
class Advertiser < ActiveRecord::Base
has_one :advertiser_account
end
我想将 advertiser_accounts 中的 advertiser_id 映射到广告商 table
中的 ap_advertiser_id
在控制台上:AdvertiserAccount.first.advertiser
AdvertiserAccount Load (0.2ms) SELECT advertiser_accounts
.* FROM advertiser_accounts
ORDER BY advertiser_accounts
.advertiser_id
ASC LIMIT 1
Advertiser Load (0.2ms) SELECT advertisers
.* FROM advertisers
WHERE advertisers
.id
= 153371 LIMIT 1
结果我没有得到
但是,我想要这样的查询:
AdvertiserAccount Load (0.2ms) SELECT advertiser_accounts
.* FROM advertiser_accounts
ORDER BY advertiser_accounts
.advertiser_id
ASC LIMIT 1
Advertiser Load (0.2ms) SELECT advertisers
.* FROM advertisers
WHERE advertisers
.ap_advertiser_id
= 153371 LIMIT 1
你检查过ap_advertiser_id
是否有唯一键约束或主键约束,如果没有。
你打破了配置原则的约定,所以你必须在模型中明确指定主键和外键。
尝试将模型更改为 -
class AdvertiserAccount < ActiveRecord::Base
belong_to :advertiser, :foreign_key => :ap_advertiser_id, :primary_key => :advertiser_id
end
class Advertiser < ActiveRecord::Base
has_one :advertiser_account, :primary_key => :ap_advertiser_id, :foreign_key => :advertiser_id
end
我有两个 table:
1.advertiser_accounts
create table if not exists advertiser_accounts (
advertiser_id int(11) not null,
deal_type_id int(11) not null,
primary key (advertiser_id),
CONSTRAINT account_advertiser_refs FOREIGN KEY (advertiser_id) REFERENCES advertisers (ap_advertiser_id ),
CONSTRAINT deal_types_refs FOREIGN KEY (deal_type_id) REFERENCES deal_types (id)
);
2。广告商
Advertiser(id: integer, ap_advertiser_id: integer)
模型中:
AdvertiserAccount
class AdvertiserAccount < ActiveRecord::Base
belong_to :advertiser
end
广告商
class Advertiser < ActiveRecord::Base
has_one :advertiser_account
end
我想将 advertiser_accounts 中的 advertiser_id 映射到广告商 table
中的 ap_advertiser_id在控制台上:AdvertiserAccount.first.advertiser
AdvertiserAccount Load (0.2ms) SELECT
advertiser_accounts
.* FROMadvertiser_accounts
ORDER BYadvertiser_accounts
.advertiser_id
ASC LIMIT 1 Advertiser Load (0.2ms) SELECTadvertisers
.* FROMadvertisers
WHEREadvertisers
.id
= 153371 LIMIT 1
结果我没有得到
但是,我想要这样的查询:
AdvertiserAccount Load (0.2ms) SELECT
advertiser_accounts
.* FROMadvertiser_accounts
ORDER BYadvertiser_accounts
.advertiser_id
ASC LIMIT 1 Advertiser Load (0.2ms) SELECTadvertisers
.* FROMadvertisers
WHEREadvertisers
.ap_advertiser_id
= 153371 LIMIT 1
你检查过ap_advertiser_id
是否有唯一键约束或主键约束,如果没有。
你打破了配置原则的约定,所以你必须在模型中明确指定主键和外键。
尝试将模型更改为 -
class AdvertiserAccount < ActiveRecord::Base
belong_to :advertiser, :foreign_key => :ap_advertiser_id, :primary_key => :advertiser_id
end
class Advertiser < ActiveRecord::Base
has_one :advertiser_account, :primary_key => :ap_advertiser_id, :foreign_key => :advertiser_id
end