gpt4 book ai didi

ruby-on-rails - 在 Rails 中处理带有 "action"参数的 POST

转载 作者:数据小太阳 更新时间:2023-10-29 07:39:28 26 4
gpt4 key购买 nike

我的 API 正在处理来自外部源的回调,该回调发送包含 action 参数的 POST。该参数与rails action无关,只是恰好命名相同:

param1=value1&action=example&param2=value2

当它到达 rails 时,rails 将参数覆盖为操作的名称(在本例中为 create)...所以我得到:

{ action: 'create', param1: 'value1', params2: 'value2' }

如何以干净的方式访问原始的action 参数?目前我必须解析 raw_post:

Rack::Utils.parse_query(request.raw_post)["action"]

哪个丑...有什么更好的吗?

最佳答案

您可以创建一个 Rack 中间件来拦截在参数中具有操作的请求并在转发之前重命名它们。

我相信它看起来像这样:

class ActionParamRenamer
def initialize(app)
@app = app
end

def call(env)
# you might want to only do this for certain paths
if env["rack.request.form_hash"] && env["rack.request.form_hash"]["action"]
env["rack.request.form_hash"]["action_param"] = env["rack.request.form_hash"].delete("action")
end
if env["rack.request.form_vars"] && env["rack.request.form_vars"].match(/[\?&]action\=/)
env["rack.request.form_vars"].gsub!(/([\?&])action\=/, /\1action_param=/)
end
@app.call(env)
end
end

我猜你会把它添加到你的 config/initializers/action_renamer.rb 中,或者现在可以在 Rails 中使用:

Rails::Initializer.run do |config|
config.middleware.use "ActionParamRenamer"
end

关于ruby-on-rails - 在 Rails 中处理带有 "action"参数的 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789966/

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