Search code examples
ruby-on-railsrubyinitializationforeign-keys

Rails, uninitialized constant on create


im getting error when im tring to save my object of type Wedding. I have many foreign keys to the same class and on create action i gets NameError (uninitialized constant Wedding::user)

Wedding.rb

class Wedding < ApplicationRecord
    belongs_to :creator, class_name: 'user', foreign_key: 'creator_id'
    belongs_to :second_creator, class_name: 'user', foreign_key: 'second_creator_id', optional: true
    belongs_to :third_creator, class_name: 'user', foreign_key: 'third_creator_id', optional: true
    belongs_to :bride, class_name: 'user', foreign_key: 'bride_id'
    belongs_to :groom, class_name: 'user', foreign_key: 'groom_id'
    belongs_to :photo_type, class_name: 'tier', foreign_key: 'photo_type', optional: true
    belongs_to :video_type, class_name: 'tier', foreign_key: 'video_type', optional: true

    enum wedding_status: { reservation: 0, signed: 1, post: 2, delivered: 3, done: 4 }

end

User.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  before_save :set_full_name

  has_many :weddings, class_name: 'wedding', foreign_key: 'creator_id'
  has_many :weddings, class_name: 'wedding', foreign_key: 'second_creator_id'
  has_many :weddings, class_name: 'wedding', foreign_key: 'third_creator_id'
  has_many :weddings, class_name: 'wedding', foreign_key: 'bride_id'
  has_many :weddings, class_name: 'wedding', foreign_key: 'groom_id'

  validates :role, :email, :first_name, :last_name, presence: true

  enum role: { super_admin: 0, admin: 1, bride: 2, groom: 3 }

  protected

  def set_full_name
    self.full_name = "#{first_name} #{last_name}"
  end

end

wedding_controller.rb

def create
        @wedding = Wedding.new(wedding_params)


        if @wedding.save
          redirect_to weddings_path, notice: t('views.weddings.create.notice')
        else
          render :new
        end
end

private

      def wedding_params
        ret = params.require(:wedding).permit(:creator_id, :bride_id, :groom_id, :photo_type_id, 
        :video_type_id, :wedding_date, :wedding_location, :reception_location, :bride_house, 
        :groom_house, :is_session_photo, :is_session_video, :session_location, :session_date, 
        :price, :is_paid, :advance, :is_advance_paid, :is_photo, :is_video, :video_link, 
        :photo_link, :thumb_image, :second_creator_id, :third_creator_id, :wedding_status)

        ret
      end

Im using simple_form to render my form.


Solution

  • The class name should be capitalized.

    belongs_to :creator, class_name: 'User', foreign_key: 'creator_id'
    

    You need to change all other lines (the same issue)