首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根对象或嵌套对象中的Rails强参数

根对象或嵌套对象中的Rails强参数
EN

Stack Overflow用户
提问于 2018-08-01 08:47:41
回答 2查看 716关注 0票数 2

我希望能够在根params对象中支持一组参数:

代码语言:javascript
复制
?foo=a
params.permit(:foo)

或在嵌套对象中:

代码语言:javascript
复制
?bar[foo]=a
params.require(:bar).permit(:foo)

我将参数从form对象传递到该控制器,因此嵌套对象自然发生,但我也希望能够在查询字符串中传递根对象中的参数,并同时支持这两种方法。

有没有一种优雅的、非黑客的方式来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-01 10:47:09

require类似于[],但在缺少值时会有一个异常(非常类似于Hash#fetch)。相反,您可以直接使用[]来获取嵌套结构(如果它在那里),否则回退到根params

代码语言:javascript
复制
(params[:bar] || params).permit(:foo)
票数 3
EN

Stack Overflow用户

发布于 2018-08-01 09:30:49

请记住,require与permit是不同的。

require方法确保存在特定的参数。没有必要在嵌套的参数上使用,它确保所需的参数出现在参数中,否则将抛出错误。

您可以像这样使用嵌套属性

代码语言:javascript
复制
params = ActionController::Parameters.new({
  person: {
    name: "Francesco",
    age:  22,
    pets: [{
      name: "Purplish",
      category: "dogs"
    }]
  }
})

permitted = params.permit(person: [ :name, { pets: :name } ])
permitted.permitted?                    # => true
permitted[:person][:name]               # => "Francesco"
permitted[:person][:age]                # => nil
permitted[:person][:pets][0][:name]     # => "Purplish"
permitted[:person][:pets][0][:category] # => nil

您可以查看此here上的文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51623891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档