2015-10-06 82 views
2

我试图在发生更改时接收关于我的Trello模型的更新,我正在使用它们的webhooks。问题在于参数名称之一是“action”,它似乎被Rails覆盖,具体取决于Routes.rb中的值。有什么办法可以避免这种情况,还是我必须忍受它?Rails覆盖参数值


的routes.rb

match "/trello" => "trello_updates#index", via: [:get,:post] 

网络挂接REPONSE

Parameters: {"model"=>{...},"action"=>"index"} 

回答

2

你可以写在初始化中间件和更新来自trello网络挂接来的PARAMS。像下面 -

class TrelloWebhooks 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    request = Rack::Request.new(env) 
    trello_action = request.params['action'] 
    request.update_param('trello_action', trello_action) 
    status, headers, response = @app.call(env) 
    [status, headers, response] 
    end 

end 

Rails.application.config.middleware.use 'TrelloWebhooks' 
+0

我还是比较新的Rails环境,所以我不知道该把代码放在哪里? –

+0

@NielsSønderbæk,你可以将这段代码复制到'config/initializers/trello_webhooks.rb'中的一个文件中 –

+0

这给了我以下错误:'trello_webhooks.rb:17:'':undefined method 'use'for main:Object(NoMethodError)' –

1

我不得不修改从毗湿奴,这是公认的答案,使其与POST请求的工作代码,所以如果你有一个POST请求,你需要从出获取PARAMS主体的反应,而不是:

class TrelloWebhooks 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    request = Rack::Request.new(env) 
    body = JSON.parse(request.body.string) 
    trello_action = body["action"] 
    request.update_param('trello_action', trello_action) 
    status, headers, response = @app.call(env) 
    [status, headers, response] 
    end 

end 

Rails.application.config.middleware.use 'TrelloWebhooks' 
+1

我错过了身体部位,感谢修复 –