ActiveRecord:Column' nivelAcceso'不能为空

时间:2015-08-28 01:51:40

标签: mysql ruby activerecord sinatra

我需要添加更改密码'我目前正在构建的应用的功能,但当我尝试更改用户的密码时,我收到以下错误:

专栏' nivelAcceso'不能为空;用户的密码和' nivelAcceso' (用户在应用程序中具有的访问权限)可以在同一个表格(usuarios)中找到,但它们并没有任何关联。

处理密码更改的路由如下所示:

app.rb

put '/:id' do
change_password(params[:id], params[:password], params[:confirm])
end

虽然控制器看起来像:

password_controller.rb

def change_password(id, password, confirm)
if password.nil? || confirm.nil?
redirect '/dashboard/change_password', error: 'Debe completar todos los campos.'
elsif password != confirm
redirect '/dashboard/change_password', error: 'Los campos no coinciden.'
else
u = User.find(id)

new_password = BCrypt::Password.create(password)

u.passwordUsuario = new_password

if u.save
  redirect '/dashboard/change_password', notice: 'Cambio de contraseña exitoso.'
else
  redirect '/dashboard/change_password', error: 'Ha ocurrido un error, intente nuevamente.'
end
end
end

到目前为止,我已尝试以下方法但无济于事:

u.nivelAcceso = session[:rol] # 'nivelAcceso' value is stored in the session

2 个答案:

答案 0 :(得分:0)

ActiveRecord表示该列不能为空。这通常是由于数据库以这种方式配置。

如果使用ActiveRecord迁移配置数据库,请查找以下内容:

create_table(:cars) do |t|
  # other commands
  t.string :foo, null: false
end

您可以通过编写和运行新迁移来更改此内容:

change_column :table_name, :foo_column, :string, null: true

答案 1 :(得分:0)

原来改变密码的路线与编辑用户的路线完全相同。

原创,非工作路线

put '/:id' do
change_password(params[:id], params[:password], params[:confirm])
end

已修改的工作路线

put '/change_password/:id' do
change_password(params[:id], params[:password], params[:confirm])
end