rails strong params意外将字符串转换为整数

时间:2015-06-10 09:42:21

标签: ruby-on-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

1 个答案:

答案 0 :(得分:0)

您的控制台输出显示

{"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进行更改