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

时间:2018-10-24 19:38:27

标签: ruby-on-rails activerecord has-many-through belongs-to ruby-on-rails-5.2

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

为什么验证需要储备金?显然,储备金是可选的。

1 个答案:

答案 0 :(得分:1)

  

ActiveRecord :: RecordInvalid(验证失败:储备金必须存在)

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

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