我正在研究Michael Harls turtorial。在第6章中,我将在沙盒控制台中创建新用户。当我创建一个新用户时,图片显示了会发生什么。返回一个新对象,但名称和电子邮件是nil虽然我设置了属性,你可以看到。当我访问attibutes vie user.name时,它返回名称。任何人都可以向我解释这个吗?
谢谢 塞巴斯蒂安
模型 user.rb
BOOL Sdialog::PreTranslateMessage(MSG* pMsg)
{
BOOL bNoDispatch, bDealtWith;
bDealtWith = FALSE;
if (IsCTRLpressed() &&
pMsg->message == WM_KEYDOWN && pMsg->wParam == _TINT(_T('A')))
{
// Deal with it
// Eat it.
bNoDispatch = TRUE;
bDealtWith = TRUE;
}
if (!bDealtWith)
bNoDispatch = CDialogEx::PreTranslateMessage(pMsg);
return bNoDispatch;
}
user_controller.rb
class User < ApplicationRecord
attr_accessor :name, :email
end
_create_users.rb
class UsersController < ApplicationController
def new
end
end
答案 0 :(得分:1)
从您的应用服务器执行的查询中,我了解到您的问题与parameters sanitazion
INSERT INTO "users" ("created_at", "updated_at") VALUES (?, ?) [["created_at", "2017-11-18"],["updated_at","2017-11-17"]]
在综合中,您未在strong params
或users_controller
模型中的attr_accessor
声明user
。
rails
3
个版本
您需要在模型attr_accessor
类
user
user.rb
class User
attr_accessor :name, :email
end
现在,如果你User.new(name: 'Fabrizio Bertoglio', email: 'fabrizio.developer@gmail.com')
,你应该能够写下这些属性
了解更多信息请阅读
usage of attr_accessor in Rails
如果您使用rails >= 3
您需要在控制器中将strong_params
声明为私有方法
users_controller.rb
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
是一个哈希,ActionController:Parameters
是一个新的Rails类,它有特殊的方法。 .require()
仅选择user
哈希中的params
对象,permit
使name
和email
字段可读。
这是关于strong params和in the api的文档,您有更多信息。
打开你的控制台并创建你的参数
params = ActionController::Parameters.new({
user: {
name: "Francesco",
email: "francesco@email.com"
}
})
然后您require
user
对象和permit
name
和email
属性
permitted = params.require(:user).permit(:name, :email)
现在,如果您在控制台中输入permitted
,则输出应为
<ActionController::Parameters {"name"=>"Francesco", "email"=>"francesco@email.com"} permitted: true>
permitted
字段必须为true
user = User.new(permitted)
应该有效,原因是你在控制台中所做的是:
user = User.new()
因为您传递的name:
和email
不是sanitized
,所以从技术上讲,您什么也没有通过。这就是你需要控制器中的strong_params