रेल 4 से रेल 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

जब मैं उपयोगकर्ता को आरक्षित या घटना के लिए धक्का देने की कोशिश कर रहा हूं:

@event.users << current_user

मुझे वह त्रुटि मिली है:

ActiveRecord::RecordInvalid (Validation failed: Reserve must exist):

सत्यापन के लिए रिजर्व की आवश्यकता क्यों है? यह स्पष्ट है कि रिजर्व वैकल्पिक है।

0
Alex T. 24 अक्टूबर 2018, 22:38

1 उत्तर

सबसे बढ़िया उत्तर

ActiveRecord::RecordInvalid (सत्यापन विफल: रिजर्व मौजूद होना चाहिए)

त्रुटि से बचने के लिए आप नीचे दिए गए belongs_to में optional: true का उपयोग कर सकते हैं।

class Subscription < ApplicationRecord
  belongs_to :event
  belongs_to :reserve, optional: true
  belongs_to :user
end
1
Pavan 25 अक्टूबर 2018, 18:28