新手问题 如何 permit 一个 array of hashes

jenenliu · 2018年09月17日 · 最后由 jenenliu 回复于 2018年09月17日 · 1252 次阅读

各位好,我有这么一个接口,然后想传这些数据 然后我现在想在 shipping_charge_template controller 下面拿到 shipping_methods 的数值,我定义了如下函数

def shipping_charge_temp_params
    params.require(:shipping_charge_template).permit(:name, :shipping_charge_method_id,
                  shipping_methods: %i[name
                                       base_items base_price
                                       increment_items_unit
                                       increment_items_unit_price])
  end

但是一直拿不到,得到的结果是 {"name"=>"带快递的运费模板测试", "shipping_charge_method_id"=>2} permitted: true>

我是根据这个how to permit an array with strong parameters来做的, 看了 rails guide 也是一头雾水,不知道是不是我哪里理解错了,麻烦各位大大帮忙看看,多谢。

body 最外面套上 {"shipping_charge_template": ....} 试试

strong parameters是让你设一个 white list allow list,让你标记传到 action 里面的参数哪个是可以接受的,并不是用来取参数的。

试一下

def shipping_charge_temp_params
    params.permit(:name, :shipping_charge_method_id,
                  shipping_methods: %i[name
                                       base_items base_price
                                       increment_items_unit
                                       increment_items_unit_price])
end
3 楼 已删除

试一下这样

def shipping_charge_temp_params
  params[:shipping_charge_template][:shipping_methods] = params[:shipping_methods]
  params.require(:shipping_charge_template).permit(:name, :shipping_charge_method_id, shipping_methods: %I[name base_items base_price increment_items_unit increment_items_unit_price])
end

查了一下,还可以试着用 ParamsWrapper

piecehealth 回复

white list allow list

笑 Cry

akayuki 回复

不行,会报错 NoMethodError (undefined method[]=' for nil:NilClass):`

piecehealth 回复

Unpermitted parameter: :shipping_charge_template

akayuki 回复

你好,成功拿到了,谢谢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号