新记录不会保存在数据库中

时间:2014-11-13 10:24:36

标签: ruby-on-rails

我希望从“新”视图创建并保存数据库中的新用户,但是新记录不会保存在数据库中。但是尝试从控制台进行此操作并且所有工作正常,如何修复?

这是我的用户控制器

class UsersController < ApplicationController
  def index
    @users = User.all
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    @user.save
    redirect_to @user
  end

  def show
    @user = User.find(params[:id])
  end

  private
  def user_params
    params.require(:user).permit(:email, :name)
  end
end

这是来自控制台的日志,因为您可以看到事务运行

2.1.2 :001 > user = User.new(name:"mike", email:"qwerty123@gmail.com", password:"123456", password_confirmation:"123456")
 => #<User id: nil, name: "mike", email: "qwerty123@gmail.com", created_at: nil, updated_at: nil, password_digest: "$2a$10$uxFvZ4/T3rb2rQlEBAKkWuo13CUZsaBNG.DD5DPpHlI..."> 
2.1.2 :002 > user.save
   (0.2ms)  begin transaction
  User Exists (0.4ms)  SELECT  1 AS one FROM "users"  WHERE "users"."name" = 'mike' LIMIT 1
  User Exists (0.3ms)  SELECT  1 AS one FROM "users"  WHERE LOWER("users"."email") = LOWER('qwerty123@gmail.com') LIMIT 1
Binary data inserted for `string` type on column `password_digest`
  SQL (1.8ms)  INSERT INTO "users" ("created_at", "email", "name", "password_digest", "updated_at") VALUES (?, ?, ?, ?, ?)  [["created_at", "2014-11-13 10:08:01.402404"], ["email", "qwerty123@gmail.com"], ["name", "mike"], ["password_digest", "$2a$10$uxFvZ4/T3rb2rQlEBAKkWuo13CUZsaBNG.DD5DPpHlI3WjzUhl3.u"], ["updated_at", "2014-11-13 10:08:01.402404"]]
   (204.8ms)  commit transaction
 => true 

这不起作用? 抱歉我的英文不好

3 个答案:

答案 0 :(得分:1)

乍一看,您似乎必须在控制器中允许passwordpassword_confirmation。尝试将user_params方法更改为如下所示:

def user_params
  params.require(:user).permit(:email, :name, :password, :password_confirmation)
end

修改即可。另外,请粘贴您的Web服务器日志中的摘录,以揭示您提交表单时发生的情况。

答案 1 :(得分:0)

尝试更改save的{​​{1}},您可以获得更好的输出,显示缺失或格式错误的内容:

save!

答案 2 :(得分:0)

你必须阅读有关在rails 4中允许params和验证的内容。

如果您在属性(名称,电子邮件,密码)上验证用户模型,则不会保存任何记录,至少不会保留这些属性。

此外,出于安全原因,Rails要求允许每个表单中的预期参数,这将阻止任何人添加新字段并将其与表单一起提交。

看一下<{3}}是什么Mass assignment in rails以及第3和第4栏之间的区别。

另请查看validationsthis,了解记录未成功保存的原因。

离::

user = User.new(name: "AnyName")
user.save
puts user.errors.messages -->> This will print email cannot be blank in your server if you are validating the presence of the email attribute.