构建自定义PUT / PATCH请求:无路由匹配[GET]

时间:2015-01-25 00:42:00

标签: ruby-on-rails routes

我正在尝试对控制器上的方法使用PATCH / PUT操作:

def specialClickThrough
        # Incriment click
        clickIncrimentBudgetReduce = "UPDATE `campaigns` 
                                        SET clicks = clicks + 1
                                        , budget = (budget - bid_price)
                                        , is_active = CASE
                                                      WHEN (budget - bid_price) > 0.0
                                                        THEN 1
                                                      ELSE 0
                                                      END   
                                        WHERE id = " + params[:campaign_id].to_s  

        ActiveRecord::Base.connection.execute(clickIncrimentBudgetReduce)
    end

在浏览器中键入:localhost:3000/specialClickThrough/27时,它会返回:No route matches [GET] "/specialClickThrough/27",即使其中有一个显示为:

match '/specialClickThrough/:campaign_id', to: 'requests#specialClickThrough', via: 'put'

更新

我尝试过postman chrome扩展但仍然没有:

enter image description here

从它注意到的文档中简单地将请求类型设置为所需的类型。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:0)

如果您添加via: 'put'选项,GET将无法正常工作...... 那么,你是如何尝试执行PUT请求的呢? 尝试使用curlpostman也许...... 路线定义明确。问题是你正在进行GET而不是PUT请求。

答案 1 :(得分:0)

在邮递员中,似乎是响应代码422,它通常来自参数验证错误。当然,因为当你的路由需要campaign_id时你没有传入任何参数,所以你正在点击端点(对于PUT请求,你需要将参数作为数据传递,而不是像GET那样传递编码的URL。)

发送放置请求时,请确保campaign_id可用。 (例如,在您的邮递员中,请尝试在campaign_id按钮上方的key字段中输入send并输入一些值。它应该为您提供除422以外的其他内容取决于您的实施)