ruby-on-rails – 了解强参数的要求 – Rails
我有一个过滤器控制器和一个带有标签的集成对象.我正在尝试更新集成对象.我正在使用看起来像这样的强大的参数.
def filters_params params.require(:filters).permit(:tags) end 强对数的要求究竟是什么?这是关键吗?我怎么能做这个工作? 解决方法
params是您使用可能的HTML表单和Web浏览器将请求(文本消息)发送到Web服务器的参数的哈希对象.此请求消息通过机架解析为ruby Hash(Rails是一个
http://rack.github.io/应用程序).
rails应用程序使用此 http://www.rubydoc.info/gems/rack/Rack/Request req.params并根据请求路径通过适当的控制器将其路由到处理.路由在config / routes.rb文件中指定. 你的params是你发送到rails web app的params,解析并变成名为http://apidock.com/rails/ActionController/Parameters的代码结构 但要回答你的问题…… 强参数是一种模式(数据结构)规范/验证. 所以params.require(:filters).permit(:tags)基本上意味着它需要一个看起来像这样的Hash:{filters:{tags:[]}.如果您不提供所需的内容,则会引发错误.如果你给出了不允许的东西,那就被忽略了. 强大的参数允许轻松的质量分配,但过滤/白名单.否则有人可以举例:[user:{is_admin:true,id:123}}.相反,您只能允许修改名称和地址,例如.更多信息:http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters 其他可行的ruby库进行此类验证是http://dry-rb.org/gems/dry-validation/ 顺便说一下,你可以在这里看到它的工作原理 def require(key) value = self[key] if value.present? || value == false value else raise ParameterMissing.new(key) end end http://apidock.com/rails/ActionController/Parameters/permit def permit(*filters) params = self.class.new filters.flatten.each do |filter| case filter when Symbol,String permitted_scalar_filter(params,filter) when Hash then hash_filter(params,filter) end end unpermitted_parameters!(params) if self.class.action_on_unpermitted_parameters params.permit! end 正如你在这种情况下所看到的那样,它是allowed_scalar_filter: def permitted_scalar_filter(params,key) if has_key?(key) && permitted_scalar?(self[key]) params[key] = self[key] end keys.grep(/A#{Regexp.escape(key)}(d+[if]?)z/) do |k| if permitted_scalar?(self[k]) params[k] = self[k] end end end 我希望有了这些知识,你可以解决你的问题;) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |