gpt4 book ai didi

ruby-on-rails - 理解强参数的要求——Rails

转载 作者:行者123 更新时间:2023-12-03 16:03:02 25 4
gpt4 key购买 nike

我有一个 filters controller以及具有 tags 的集成对象.我正在尝试更新集成对象。我正在使用看起来像这样的强参数。

def filters_params
params.require(:filters).permit(:tags)
end
require究竟是什么?在强参数中?这是关键吗?我怎样才能做到这一点?

最佳答案

params是您使用 HTML 表单和 Web 浏览器随请求(文本消息)发送到 Web 服务器的参数的哈希对象。此请求消息被机架解析为 ruby​​ 哈希(Rails 是一个 http://rack.github.io/ 应用程序)。
rails 应用程序接受这个 http://www.rubydoc.info/gems/rack/Rack/Request req.params并根据请求路径将其路由到适当的 Controller 处理。路由在 config/routes.rb 中指定文件。

您的 params是您发送到 rails web 应用程序、解析并转换为名为 http://apidock.com/rails/ActionController/Parameters 的代码结构的参数
您可以通过放一些 binding.pry 来轻松检查它。 https://github.com/pry/pry在这个结构的 Controller 和检查类中。然后你只需点击 apidock 以获得答案(还有从控制台显示源代码的动态方式)。

但是要回答你的问题...

强参数是一种模式(数据结构)规范/验证。

所以params.require(:filters).permit(:tags)基本上意味着它需要一个看起来像这样的哈希:{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/

顺便说一句,你可以在这里看到它是如何工作的:
http://apidock.com/rails/ActionController/Parameters/require

    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

正如你在本例中看到的那样,它是 permitted_scalar_filter :
http://apidock.com/rails/ActionController/Parameters/permitted_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

我希望有了这些知识,您可以解决您的问题;)

关于ruby-on-rails - 理解强参数的要求——Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39519186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com