How to force a has_many association using a different column as foreign key
Stuck in a - at first sight - simple problem in RoR. I have two ActiveRecord models: Foo has many Bars.. But I want to bind them by "custom_id" (not the default id):
class Foo < ApplicationRecord
has_many :bars, :class_name => "Bar", :foreign_key => "custom_id"
end
class Foo < ApplicationRecord
has_many :bars, :class_name => "Bar", :foreign_key => "custom_id"
end
Given that, I'd guess this pass would PASS, but it doesnt:
foo = Foo.new(:id=> 1, :custom_id => 100)
bar = Bar.new(:foo=>foo)
assert bar.custom_id == foo.custom_id # bar.custom_id == 1 and foo.custom_id == 100
The code is here: https://github.com/montenegrodr/temporary_repository_ror
You have to define the foreign key to on the belongs_to
side. https://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to
Class Foo
has_many :bars
end
class Bar
belongs_to :custom, class_name: 'Foo', foreign_key: "custom_id", primary_key: 'custom'
end
In this case Foo has to have a custom
as primary key.