我有一个 Rails 项目,它实现了许多独立的引擎。
- 主引擎(始终存在)
- 扩展引擎#1(扩展主引擎的可选插件)
- 扩展引擎#2(扩展主引擎的可选插件)
- 等等。
长话短说,我需要扩展引擎来添加与主引擎模型有关系的模型。
扩展不应该修改任何其他引擎的物理表,但是扩展没有理由不能创建自己的表来充当连接表来引用主引擎的表。
为了简单起见,下面说明了我要做什么。
主引擎
.../app/models/models/user.rb
module PrimaryEngine
User < ActiveRecord::Base
End
end
车辆发动机
# .../vendor/engines/vehicle_engine/app/models/vehicle.rb
module VehicleEngine
Vehicle < ActiveRecord::Base
End
end
# .../vendor/engines/vehicle_engine/config/initializers/user_extension.rb
...
PrimaryEngine::User.class_eval do
has_one :vehicle, :through => :vehicle_engine_users_vehicles
end
...
我需要使用连接表的唯一原因是因为我不能(不应该)修改主引擎的 primary_engine_user
表。通常,您只需向表中添加一个新列primary_engine_user
,即primary_engine_user.vehicle_id
.
问题是,我不想为:through =>
零件创建一个模型,因为该连接表中没有我需要向其公开功能的任何内容。
CREATE TABLE vehicle_engine_users_vehicles
(
primary_engine_user_id integer NOT NULL,
vehicle_id integer NOT NULL
)
我想知道是否有一种方法可以has_one
像has_and_belongs_to_many
,其中推断连接表但不需要指定?
谢谢!
澄清更新:
APrimaryEngine::User
可以有 1 辆车,但VehicleEngine::Vehicle
可以有许多不同的用户。