无法将对象推送到具有关联的模型



从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):

为什么验证需要预留?很明显,保留是可选的。

ActiveRecord::RecordInvalid (验证失败:保留必须存在(

您可以在belongs_to中使用optional: true,如下所示以避免错误。

class Subscription < ApplicationRecord
belongs_to :event
belongs_to :reserve, optional: true
belongs_to :user
end

最新更新