Validation failed Class must exist

后端 未结 8 1502
面向向阳花
面向向阳花 2020-12-13 17:30

I have been (hours) trouble with associations in Rails. I found a lot of similar problems, but I couldn\'t apply for my case:

City\'s class:

class Ci         


        
相关标签:
8条回答
  • 2020-12-13 17:51
    belongs_to :city, required: false
    
    0 讨论(0)
  • 2020-12-13 17:56

    You need to add the following to the end of the belongs_to relationship statement:

    optional: true
    

    It is possible to set this on a global level so that it works in the same way as older versions of rails, but I would recommend taking the time to manually add it to the relationships that really need it as this will cause less pain in the future.

    0 讨论(0)
  • 2020-12-13 17:57
    Rails.application.config.active_record.belongs_to_required_by_default = false
    

    This works because the Rails 5 has true by default to disable you go under Initilizers then click on the New_frame-work and turn the true to false

    0 讨论(0)
  • 2020-12-13 17:59

    This comes a bit late but this is how to turn off this by default in rails 5:

    config/initializers/new_framework_defaults.rb

    Rails.application.config.active_record.belongs_to_required_by_default = false
    

    In case you don't want to add optional: true to all your belongs_to.

    I hope this helps!

    0 讨论(0)
  • 2020-12-13 17:59

    Rails 5

    If you have a belongs_to relationship to :parent then you have to pass an existing parent object or create a new one then assign to children object.

    0 讨论(0)
  • 2020-12-13 18:01

    I found out a solution to the problem "Validation failed: Class must exist" and it's better than use:

    belongs_to :city, optional: true
    

    4.1.2.11 :optional

    If you set the :optional option to true, then the presence of the associated object won't be validated. By default, this option is set to false.

    cause you still make a validation in application level. I solve the problem making my own validation in create method and changing user_params method:

    def create
    
      @city = City.find(params[:city_id])
    
      Rails.logger.debug user_params.inspect
      @user = User.new(user_params)
    
      @user.city_id = @city.id
    
      if @user.save!
        flash[:success] = "Works!"
        redirect_to '/index'
      else
        render 'new'
      end
    end
    
    def user_params
      params.require(:user).permit(:name)
    end
    

    I didn't test this code, but it works in another project mine. I hope it can help others!

    0 讨论(0)
提交回复
热议问题