如何允许model[name[var]]格式参数?Rails参数配置方案
搞定Rails动态
model[name[var]]参数的Strong Parameters配置 刚好处理过类似的动态嵌套参数场景,我来给你说怎么配置强参数:
你的表单生成的category[name[en]]这种字段,提交后会在params[:category]里生成一个嵌套哈希name: { "en" => "xxx", "..." => "..." }。要让Strong Parameters允许这种动态键的哈希,只需要在参数许可方法里明确指定:name为一个可包含任意键的哈希就行。
假设你的控制器里的参数方法是category_params(你提到的location_params应该是笔误,对应Category模型),修改成下面这样:
def category_params params.require(:category).permit(:slug, name: {}) end
原理说明
name: {}是告诉Rails:我允许:name这个参数是个哈希,而且哈希里不管键是什么(比如en、fr这些动态语言码),对应的键值对都能通过强参数校验。- 如果想限制只能用指定的几种语言(比如只允许en、fr、es),也可以把允许的键列出来,这样更安全:
# 仅许可en、fr、es三种语言的名称参数 params.require(:category).permit(:slug, name: [:en, :fr, :es])
提交后的参数结构参考
表单提交后,你的参数结构大概是这样的,上面的配置会完美适配:
{ category: { slug: "tech-news", name: { en: "Tech News", fr: "Actualités Tech" } } }
内容的提问来源于stack exchange,提问作者Nino Treyssat-Vincent
相关产品推荐
相关产品推荐

