如何仅声明一次params[:data][:object]节点即可调用其下所有子参数
多层嵌套参数简化书写方案
- 局部变量提取+安全取值(通用方案)
先把公共嵌套根节点提取为局部变量,推荐使用dig方法做安全取值,避免中间层为空时抛出异常:# 提取公共根节点,仅需要写一次嵌套路径 object_params = params.dig(:data, :object) # 后续直接通过根节点调用子属性即可 update( capture_created: object_params[:created], capture_currency: object_params[:currency] # 其余子属性复用同样的写法即可 ) - Rails强参数封装(Rails项目专用)
如果是Rails项目,可结合框架自带的强参数能力做封装,同时实现参数结构校验、字段白名单控制能力:# 在控制器中定义公共参数提取方法 def object_params params.require(:data).require(:object).permit(:created, :currency) end # 业务代码中直接调用封装好的方法 update( capture_created: object_params[:created], capture_currency: object_params[:currency] ) - OpenStruct简化调用(语法糖方案)
如果希望进一步简化写法,省略哈希的[]调用语法,可将提取出的哈希转为OpenStruct对象,使用属性调用的方式取值:object = OpenStruct.new(params.dig(:data, :object)) update( capture_created: object.created, capture_currency: object.currency )
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

