Ruby 捣碎使用
Ruby Mash using
我正在使用 Grape,不明白为什么我不能改变参数 Mash。
class Publisher < ActiveRecord::Base
end
以下工作正常:
post do
Publisher.create!({
name: params[:name],
partner_id: @current_partner.id
})
end
并使用 name
和 partner_id
在我的数据库中创建新记录
但我在 params
中有很多条目,所以我只想向它们添加 partner_id
。
post do
p params
params.partner_id = @current_partner.id
p params
Publisher.create!(params.require(:name, :partner_id))
end
输出:
#<Hashie::Mash name="myName">
#<Hashie::Mash name="myName" partner_id=1>
但它在 partner_id
列
中插入带有 NULL
的行
是否使用不当?
我也不能在 update()
中只使用 params
因为 ActiveModel::ForbiddenAttributesError
它是正确的解决方法吗?
关于update()
中的params
,这是Rails中的一项安全功能,称为强参数;有关详细信息,请参阅 https://blog.8thlight.com/will-warner/2014/04/05/strong-parameters-in-rails.html and http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters。
关于您的第一个问题,我认为您对 require
的调用应该是对 permit
的调用:
Publisher.create!(params.permit(:name, :partner_id))
但这取决于您的请求参数名称是 Rails-like,即 publisher[name]
,还是像 name
中那样裸露。如果你正在做 Rails-like 参数,你会想要:
Publisher.create!(params.require(:publisher).permit(:name, :partner_id))
我注意到不仅 partner_id
为空,name
也为空。所以 Publisher.create!(params.to_h)
解决了我的问题。
我正在使用 Grape,不明白为什么我不能改变参数 Mash。
class Publisher < ActiveRecord::Base
end
以下工作正常:
post do
Publisher.create!({
name: params[:name],
partner_id: @current_partner.id
})
end
并使用 name
和 partner_id
在我的数据库中创建新记录
但我在 params
中有很多条目,所以我只想向它们添加 partner_id
。
post do
p params
params.partner_id = @current_partner.id
p params
Publisher.create!(params.require(:name, :partner_id))
end
输出:
#<Hashie::Mash name="myName">
#<Hashie::Mash name="myName" partner_id=1>
但它在 partner_id
列
NULL
的行
是否使用不当?
我也不能在 update()
中只使用 params
因为 ActiveModel::ForbiddenAttributesError
它是正确的解决方法吗?
关于update()
中的params
,这是Rails中的一项安全功能,称为强参数;有关详细信息,请参阅 https://blog.8thlight.com/will-warner/2014/04/05/strong-parameters-in-rails.html and http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters。
关于您的第一个问题,我认为您对 require
的调用应该是对 permit
的调用:
Publisher.create!(params.permit(:name, :partner_id))
但这取决于您的请求参数名称是 Rails-like,即 publisher[name]
,还是像 name
中那样裸露。如果你正在做 Rails-like 参数,你会想要:
Publisher.create!(params.require(:publisher).permit(:name, :partner_id))
我注意到不仅 partner_id
为空,name
也为空。所以 Publisher.create!(params.to_h)
解决了我的问题。