我使用Grape并且无法理解为什么我不能改变params 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>
但它在NULL
列
partner_id
数据库中插入行
使用不正确吗?
另外我不能仅在params
使用update()
,因为ActiveModel::ForbiddenAttributesError
是否是正确的解决方法?
答案 0 :(得分:0)
关于params
中的update()
,这是Rails中的一个名为Strong Parameters的安全功能;有关详细信息,请参阅https://blog.8thlight.com/will-warner/2014/04/05/strong-parameters-in-rails.html和http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters。
关于您的第一个问题,我认为您对require
的来电应该是permit
而是:
Publisher.create!(params.permit(:name, :partner_id))
但这取决于您的请求参数名称是否类似于Rails,即publisher[name]
,或者是name
中的裸名称。如果您正在执行类似Rails的参数,则需要:
Publisher.create!(params.require(:publisher).permit(:name, :partner_id))
答案 1 :(得分:0)
我注意到partner_id
不仅为空,还有name
。所以做Publisher.create!(params.to_h)
正在解决我的问题。