2015-10-06 120 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

我錯過了身體部位,感謝修復 –