2016-11-15 62 views
0

我有像這樣在本地更新我的Lead對象精細製作一個按鈕:Rails:Heroku不明白:patch /:put請求?

<%= link_to status.to_s.titlecase, lead_path(@lead, lead: { status: status }), method: :patch, class: 'dropdown-item' %> 

但遠程(在Heroku上)沒有任何反應。有在日誌中沒有什麼用處:

2016-11-15T17:23:45.013893+00:00 heroku[router]: at=info method=GET path="/leads/2562?lead%5Bstatus%5D=contact_established" host=app.herokuapp.com request_id=57e8b4e9-7a61-4b86-85eb-8f68f1fedd43 fwd="IP" dyno=web.1 connect=1ms service=44ms status=200 bytes=9678 
2016-11-15T17:23:44.972753+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] Started GET "/leads/2562?lead%5Bstatus%5D=contact_established" for IP at 2016-11-15 17:23:44 +0000 
2016-11-15T17:23:44.974230+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] Processing by LeadsController#show as HTML 
2016-11-15T17:23:44.974316+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] Parameters: {"lead"=>{"status"=>"contact_established"}, "id"=>"2562"} 
2016-11-15T17:23:44.988214+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] [1m[36mUser Load (11.5ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2[0m [["id", 1], ["LIMIT", 1]] 
2016-11-15T17:23:44.990722+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] [1m[36mLead Load (1.0ms)[0m [1m[34mSELECT "leads".* FROM "leads" WHERE "leads"."id" = $1 LIMIT $2[0m [["id", 2562], ["LIMIT", 1]] 
2016-11-15T17:23:44.992582+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] Rendering leads/show.html.erb within layouts/application 
2016-11-15T17:23:45.007497+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] Rendered leads/show.html.erb within layouts/application (14.7ms) 
2016-11-15T17:23:45.009303+00:00 app[web.1]: [57e8b4e9-7a61-4b86-85eb-8f68f1fedd43] Completed 200 OK in 35ms (Views: 17.2ms | ActiveRecord: 12.6ms) 

沒有錯誤消息回來的flash,什麼都沒有。我改變了:patch:put之間的方法,仍然沒有任何結果。

我缺少什麼?爲什麼link_to會在本地更新記錄,而在Heroku上什麼也不做?

更新

嘗試了Heroku的緣故定製路線:

resources :leads do 
    member do 
    patch 'update', to: 'leads#update', as: :update 
    end 
end 

而且改變了我的鏈接,以使用新的路徑:

<%= link_to status.to_s.titlecase, update_lead_path(@lead, lead: { status: status }), method: :patch, class: 'dropdown-item' %> 

本地工作,我也得到一個在Heroku上找不到頁面錯誤。

這是怎麼回事?

+0

看起來它正在將它作爲「get」請求處理,而不是更新。在更新操作中記錄一些內容以確保你進入該操作。 – toddmetheny

+1

你的id也在'lead'之外。所以如果你用'params [:id]'來查看它,你需要通過'params ['lead'] ['status']'來查看狀態......這對我來說看起來有點兒滑稽。我會將所有內容都傳遞給「lead」或其他所有內容。 – toddmetheny

+0

它只是觸及獲取請求,是的 - 我猜Heroku不支持鏈接中的HTTP動詞?這感覺很奇怪。我可以做自定義路線,但我並不是很想。 –

回答

0

因此,出於純粹的煩惱,我提出了Heroku能理解的:get請求。我這裏還有的路線,即:

控制器(注意非標準PARAMS)

def change 
    if @lead.update_attributes(change_lead_params) 
    notice = "#{helpers.full_name(@lead)} changed." 
    redirect_to lead_path(@lead), notice: notice 
    else 
    flash.now[:error] = "#{@lead.errors.full_messages.to_sentence}." 
    render :show 
    end 
end 

private 

def change_lead_params 
    params.permit(:status, :loan_product) 
end 

而且link_to

<%= link_to status.to_s.titlecase, change_lead_path(@lead, status: status), class: 'dropdown-item' %> 

這方面的消息問題將不勝感激,因爲Heroku沒有理由拒絕:put請求,對吧?

+0

我從來沒有在Heroku中遇到這樣的限制,但我不確定我是否已經嘗試過補丁。無論如何,Heroku表示:Heroku的路由器將請求直接傳遞給應用程序,而無需根據特定的HTTP方法進行特殊處理;該文檔是https://blog.heroku.com/expanded_http_method_support。 –

+0

也許這是一些JS庫防止它失控Rails 5,我不知道。我感到非常沮喪,並與有效的工作。 –