【发布时间】:2017-03-30 18:06:17
【问题描述】:
我有Users 和Trucks。我希望能够说@truck.drivers << @users 和@user.truck = @truck。
解决方案很简单,直到我希望将关系存储在连接表中。
# tables
:users
:id
:truck_drivers
:user_id
:truck_id
:truck
:id
我已经达到了可以说 @truck.drivers << @user 和 @user.trucks << @truck 的位置,但为了我的理智,我想限制用户一次只占用一辆卡车。
有可能吗?带有连接表的 has_many/belongs_to?还是我应该尝试不同的方法?我没有为连接表使用第三种模型。这只是一张桌子。这是我目前所拥有的。
class User < ApplicationRecord
has_and_belongs_to_many :trucks,
join_table: :truck_drivers, # points to the table
class_name: :Truck # looks for the truck model in the table
end
class Truck < ApplicationRecord
belongs_to :company
has_and_belongs_to_many :drivers,
join_table: :truck_drivers,
class_name: :User
end
我首先需要一个连接表的原因是因为每个User 可以有很多Roles:管理员、经理、司机、客户服务等。我认为添加一个没有意义truck_id 给所有用户,如果所有用户都不会使用卡车。
【问题讨论】:
标签: ruby-on-rails ruby join