从Rails 4升级到Rails 5.2后,我在模型关联方面遇到了一些问题。
我有一个模型事件,其中有用户作为事件的成员,每个事件都有一个预留给以后要参加的用户。
# app/models/event.rb
class Event < ApplicationRecord
# Events has many Users through subcsriptions
has_many :subscriptions
has_one :reserve
has_many :users, :through => :subscriptions
...
end
预订型号:
# app/models/reserve.rb
class Reserve < ApplicationRecord
belongs_to :event, optional: true
has_many :subscriptions
has_many :users, :through => :subscriptions
end
订阅模式:
class Subscription < ApplicationRecord
belongs_to :event
belongs_to :reserve
belongs_to :user
end
当我试图推动用户保留OR事件时:
@event.users << current_user
我遇到了这个错误:
ActiveRecord::RecordInvalid (Validation failed: Reserve must exist):
为什么验证需要储备金?显然,储备金是可选的。
答案 0 :(得分:1)
ActiveRecord :: RecordInvalid(验证失败:储备金必须存在)
您可以在optional: true
中使用belongs_to
,如下所示,以避免错误。
class Subscription < ApplicationRecord
belongs_to :event
belongs_to :reserve, optional: true
belongs_to :user
end