我想用电话号码保存模型用户,但是Rails意外将电话从字符串转换为整数类型

def create
    @user = User.new(user_params)
    if @user.save
        log_in @user
        user_response = {
            'user_id' => @user.id
        }
        render json: user_response
    else
        render json: @user.errors, status: :unprocessable_entity
    end
end

private
def user_params
    params.require(:user).permit(:username, :phone, :password, :password_confirmation)
end


错误:

Parameters: {"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "phone"=>"12345678901", "username"=>"test", "user"=>{"username"=>"lv", "phone"=>"12345678901"}}

   (0.1ms)  BEGIN

  User Exists (0.2ms)  SELECT  1 AS one FROM `users` WHERE `users`.`phone` = **BINARY '18610012942'** LIMIT 1

   (0.1ms)  ROLLBACK

Completed 422 Unprocessable Entity in 6ms (Views: 0.2ms | ActiveRecord: 0.5ms)


谁能帮我?
非常感谢。

更新:

移民:

class AddPhoneToUsers < ActiveRecord::Migration
  def change
    add_column :users, :phone, :string, index: true
  end
end


模型:

class User < ActiveRecord::Base
attr_accessor :remember_token

validates :phone, presence: true, length: {minimum: 11, maximum: 11},
                      uniqueness: true, format: {with: VALID_PHONE_REGEX}

end

最佳答案

您的控制台输出显示

{"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "phone"=>"12345678901", "username"=>"test", "user"=>{"username"=>"lv", "phone"=>"12345678901"}} ,


相反,它应该像这样:

{"user"=>{"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "phone"=>"12345678901", "username"=>"test"}}


根据上述内容在form中进行更改

09-19 10:44