当外键不是 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