Rails的has_many关联中如何引用非常规列名user_of_booking_id?
实现方案
无需修改数据库即可实现需求,Rails的has_many关联支持显式指定关联的主键来源,直接绑定你通过attr_accessor定义的user_of_booking_id属性即可。
代码修改示例
调整你的Reservation类代码如下:
class Reservation < ActiveRecord::Base belongs_to :member has_one :schedule, as: :schedulable, dependent: :destroy attr_accessor :user_of_booking_id # 新增has_many关联,以下示例假设关联目标为User模型,可替换为你实际对应的模型 has_many :booking_users, class_name: 'User', primary_key: 'user_of_booking_id', foreign_key: 'id' end
参数说明
class_name:填写你要关联的目标模型的类名,若关联的不是User模型自行替换即可primary_key:指定用当前Reservation类的user_of_booking_id作为关联匹配的主键,Rails会直接读取该属性的值,不需要该属性对应数据库字段foreign_key:填写目标模型上用于匹配的字段名,示例中目标模型用主键id匹配,所以填id,可根据实际业务调整
注意事项
- 由于
user_of_booking_id是内存级属性,仅当你给该属性赋值后,关联才能正常返回结果:比如表单提交赋值完成后、或者手动执行reservation.user_of_booking_id = 目标用户ID后,调用reservation.booking_users即可拿到对应关联数据 - 若未给
user_of_booking_id赋值,关联会默认返回空集合
内容的提问来源于stack exchange,提问作者Caio Felipe
相关产品推荐
相关产品推荐

