Ruby on rails Railstutorial.org第6章User.new(名称:“name”)返回零

Ruby on rails Railstutorial.org第6章User.new(名称:“name”)返回零,ruby-on-rails,railstutorial.org,Ruby On Rails,Railstutorial.org,我现在正在为迈克尔·哈尔斯的turtorial工作。在第6章中,我将在沙盒控制台中创建新用户。当我创建一个新用户时,图片显示了发生了什么。返回了一个新对象,但是名称和电子邮件为零,尽管我设置了您可以看到的属性。当我访问attibutes vie user.name时,它会返回名称。有人能给我解释一下吗 多谢各位 塞巴斯蒂安 模型 user.rb class用户

我现在正在为迈克尔·哈尔斯的turtorial工作。在第6章中,我将在沙盒控制台中创建新用户。当我创建一个新用户时,图片显示了发生了什么。返回了一个新对象,但是名称和电子邮件为零,尽管我设置了您可以看到的属性。当我访问attibutes vie user.name时,它会返回名称。有人能给我解释一下吗

多谢各位 塞巴斯蒂安

模型 user.rb

class用户
用户_controller.rb

class UsersController < ApplicationController
  def new
  end


end
class UsersController
_创建_users.rb

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end
class CreateUsers

从应用程序服务器执行的查询中,我了解到您的问题与
参数sanitazion

INSERT INTO "users" ("created_at", "updated_at") VALUES (?, ?) [["created_at", "2017-11-18"],["updated_at","2017-11-17"]]
在合成中,您没有在
users\u controller
中声明
强参数,也没有在
user
模型中声明
attr\u访问器

对于
rails
版本,直到
3

您需要在模型
user
类中定义一个
attr\u访问器

user.rb

class User
    attr_accessor :name, :email
end
class UsersController
    def create
       @user = User.new(user_params)
       # the rest of the logic
    end

    private
    def user_params
        params.require(:user).permit(:name, :email)
    end
end
现在如果你做了
User.new(名字:'Fabrizio Bertoglio',电子邮件:'Fabrizio。developer@gmail.com)
您应该能够在这些属性上进行编写

欲了解更多信息,请阅读此

如果您使用的是
rails>=3

您需要在控制器中将
strong_参数
声明为私有方法

users\u controller.rb

class User
    attr_accessor :name, :email
end
class UsersController
    def create
       @user = User.new(user_params)
       # the rest of the logic
    end

    private
    def user_params
        params.require(:user).permit(:name, :email)
    end
end
params
是一个散列,是一个新的Rails类,它有特殊的方法
.require()
仅选择
参数
散列中的
用户
对象,
允许
使
名称
电子邮件
字段可读

这是关于的文档,您有更多信息

打开控制台并创建参数

params = ActionController::Parameters.new({
  user: {
    name: "Francesco",
    email:  "francesco@email.com"
  }
})
然后您
需要
用户
对象和
允许
名称
电子邮件
属性

permitted = params.require(:user).permit(:name, :email)
现在,如果您在控制台中输入
允许
,您的输出应该是

<ActionController::Parameters {"name"=>"Francesco", "email"=>"francesco@email.com"} permitted: true>
如果可行,原因是您在控制台中执行的操作是:

user = User.new()

因为您传递的
名称:
电子邮件
未经
消毒
,所以从技术上讲,您没有传递任何信息。这就是为什么您需要控制器中的
strong_参数
您是否生成了这样的用户模式:“rails生成模型用户名:字符串电子邮件:字符串”?嘿,谢谢您的帮助。是的,我有。我的用户模型和用户控制器与Michael Hartls书中的示例完全相同。@SebastianPeter如果我的解决方案没有帮助,请根据您使用的rails版本,向我们展示代码并告诉我们您使用的rails版本。我的模型和用户控制器文件与Michael HArtl教程中的完全相同。wehn I write user.name当我写p用户名和电子邮件为零时,它返回“Michael Hartl”。至少对我来说,这是件奇怪的事情。代码现在包括在内了。在本教程中,我使用Ruby 5.1。2@SebastianPeter你使用的是什么rails版本?对不起,我指的是rails 5.1.2。Michael Hartl要求在教程中使用该版本。@Sebastian Peter那么为什么不在控制器中包含
强参数