使用 strong_params 将 JSON 数组保存到 rails 中的数据库
Save a JSON array to database in rails with strong_params
我正在尝试更新用户的属性。所有属性都是字符串或整数,但我有一个签名字段,它是一个 JSON 对象。
这是我从日志中得到的参数:
{"first_name"=>"Jackson", "last_name"=>"Cunningham", "email"=>"jackson@gmail.com", "phone"=>"", "address"=>"", "city"=>"", "province"=>""},
"signature"=>"[{\"lx\":80,\"ly\":4,\"mx\":80,\"my\":3},{\"lx\":78,\"ly\":3,\"mx\":80,\"my\":4},{\"lx\":72,\"ly\":4,\"mx\":78,\"my\":3},
{\"lx\":67,\"ly\":5,\"mx\":72,\"my\":4},{\"lx\":64,\"ly\":7,\"mx\":67,\"my\":5},
{\"lx\":60,\"ly\":9,\"mx\":64,\"my\":7},{\"lx\":51,\"ly\":13,\"mx\":60,\"my\":9},
{\"lx\":45,\"ly\":16,\"mx\":51,\"my\":13},
{\"lx\":41,\"ly\":19,\"mx\":45,\"my\":16},
{\"lx\":38,\"ly\":20,\"mx\":41,\"my\":19},
{\"lx\":39,\"ly\":20,\"mx\":38,\"my\":20},
{\"lx\":54,\"ly\":42,\"mx\":55,\"my\":42}]",
"commit"=>"Save", "id"=>"1"}
更新操作和强参数方法:
def update
@user = current_user
if @user.update_attributes(user_params)
redirect_to dashboard_path
else
render :edit
end
end
protected
def user_params
params.require(:user).permit(
:first_name, :last_name, :phone, :email, :password_digest, :address, :city, :province, :signature)
end
除了 :signature 之外的所有内容都在更新,它出现在 params[:signature] 中,但是当我调用 user_params.
时 没有
如何解决?如何通过强参数获取此 JSON 字符串?
因为signature
不在用户属性里面。你有:
{
"first_name" => "Jackson",
"last_name" => "Cunningham",
// etc.
},
"signature" => "asasfafsafs"
但你真正想要的是:
{
"first_name" => "Jackson",
"last_name" => "Cunningham",
"signature" => "asasfafsafs",
// etc.
}
所以在您的 HTML 表单中,您应该使用 <input name="user[signature]">
而不是 <input name="signature">
。
我正在尝试更新用户的属性。所有属性都是字符串或整数,但我有一个签名字段,它是一个 JSON 对象。
这是我从日志中得到的参数:
{"first_name"=>"Jackson", "last_name"=>"Cunningham", "email"=>"jackson@gmail.com", "phone"=>"", "address"=>"", "city"=>"", "province"=>""},
"signature"=>"[{\"lx\":80,\"ly\":4,\"mx\":80,\"my\":3},{\"lx\":78,\"ly\":3,\"mx\":80,\"my\":4},{\"lx\":72,\"ly\":4,\"mx\":78,\"my\":3},
{\"lx\":67,\"ly\":5,\"mx\":72,\"my\":4},{\"lx\":64,\"ly\":7,\"mx\":67,\"my\":5},
{\"lx\":60,\"ly\":9,\"mx\":64,\"my\":7},{\"lx\":51,\"ly\":13,\"mx\":60,\"my\":9},
{\"lx\":45,\"ly\":16,\"mx\":51,\"my\":13},
{\"lx\":41,\"ly\":19,\"mx\":45,\"my\":16},
{\"lx\":38,\"ly\":20,\"mx\":41,\"my\":19},
{\"lx\":39,\"ly\":20,\"mx\":38,\"my\":20},
{\"lx\":54,\"ly\":42,\"mx\":55,\"my\":42}]",
"commit"=>"Save", "id"=>"1"}
更新操作和强参数方法:
def update
@user = current_user
if @user.update_attributes(user_params)
redirect_to dashboard_path
else
render :edit
end
end
protected
def user_params
params.require(:user).permit(
:first_name, :last_name, :phone, :email, :password_digest, :address, :city, :province, :signature)
end
除了 :signature 之外的所有内容都在更新,它出现在 params[:signature] 中,但是当我调用 user_params.
时 没有如何解决?如何通过强参数获取此 JSON 字符串?
因为signature
不在用户属性里面。你有:
{
"first_name" => "Jackson",
"last_name" => "Cunningham",
// etc.
},
"signature" => "asasfafsafs"
但你真正想要的是:
{
"first_name" => "Jackson",
"last_name" => "Cunningham",
"signature" => "asasfafsafs",
// etc.
}
所以在您的 HTML 表单中,您应该使用 <input name="user[signature]">
而不是 <input name="signature">
。