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