2016-11-15 3 views
0

У меня есть кнопка сделал вот так, что обновляет мой Lead объект штраф на месте:Rails: Heroku не понимает: patch /: поместить запросы?

<%= 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?

Update

Пробовал обычай маршрут ради 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

Ваш идентификатор также находится вне 'lead'. Поэтому, если вы посмотрите его на 'params [: id]', вам нужно посмотреть статус с помощью параметра params ['lead'] ['status'] '..., который выглядит немного смешно для меня. Я бы либо пропустил все внутри «свинца», либо все снаружи. – toddmetheny

+0

Это просто поражает запрос на получение, да. Я полагаю, что Heroku не поддерживает HTTP-глагол в ссылке? Это что-то странное, похожее на это. Я мог просто выполнять пользовательские маршруты, но на самом деле я этого не хочу. –

ответ

0

Так что из явного досады я сделал запрос :get, который может понять Героку. Here're маршруты, а именно:

контроллер (обратите внимание на нестандартные 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, я понятия не имею. Я слишком расстроен и пошел с тем, что сработало. –