Завершенные рельсы 406 Недопустимо в 64 мс
У меня есть форма на моем веб-сайте со страницей, на которой я могу редактировать / удалять / добавлять почтовые ящики:
- http://example.com/settings/mailboxes
- http://example.com/settings/mailboxes/3/edit
- http://example.com/settings/mailboxes/3
- и т.п.
Всякий раз, когда я что-то делаю с почтовым ящиком (обновляю, уничтожаю), я получаю эту ошибку:
Перенаправлено на http://example.com/ Завершено 406 Недопустимо в 64 мс
Но данные обновляются.
Вот код контроллера:
# PUT /mailboxes/1
def update
@mailbox = Mailbox.find(params[:id])
if @mailbox.update_attributes(params[:mailbox])
redirect_to(root_path, :notice => 'Mailbox was successfully updated.')
else
render :action => "edit"
end
end
# DELETE /mailboxes/1
def destroy
@mailbox = Mailbox.find(params[:id])
@mailbox.destroy
redirect_to(root_path)
end
Вот информация routs.rb:
match 'settings.js' => 'settings#javascript', :via => :get, :format => :js
scope '/settings' do
# Directs /settings/mailboxes/* to Settings::MailboxesController
# (app/controllers/settings/mailboxes_controller.rb)
resources :mailboxes
end
Что я делаю неправильно? Вот что показывает журнал:
if @mailbox.update_attributes(params[:mailbox])
(rdb:2) response.status
200
(rdb:2) next
/Users/Fallen/Projects/support-app/trunk/app/controllers/mailboxes_controller.rb:65
redirect_to(mailboxes_path, :notice => 'Mailbox was successfully updated.')
(rdb:2) response.status
200
(rdb:2) next
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.0/lib/action_controller/metal/implicit_render.rb:5
default_render unless response_body
(rdb:2) response_body
[" "]
(rdb:2) response.status
406
(rdb:2) cont
Started PUT "/settings/mailboxes/5" for 127.0.0.1 at 2011-10-14 12:54:38 +0200
Status Load (0.4ms) SELECT `statuses`.* FROM `statuses` WHERE `statuses`.`name` = 'Incoming emails fetching' LIMIT 1
(0.1ms) BEGIN
(0.4ms) UPDATE `statuses` SET `last_action_at` = '2011-10-14 10:54:38' WHERE `statuses`.`id` = 1
(39.6ms) COMMIT
Processing by MailboxesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"0cip2dsYre9anfy/8rEgtuYcgrgC3si6aSuppjzxuHU=", "mailbox"=>{"name"=>"Dev Support #4", "sender_name"=>"example.com Support #4", "email_address"=>"support_dev4@example.com", "color"=>"B2EB3D"}, "commit"=>"Update Mailbox", "id"=>"5"}
Mailbox Load (0.5ms) SELECT `mailboxes`.* FROM `mailboxes` WHERE `mailboxes`.`id` = 5 LIMIT 1
Status Load (0.5ms) SELECT `statuses`.* FROM `statuses` WHERE `statuses`.`name` = 'Incoming emails fetching' LIMIT 1
(0.1ms) BEGIN
(0.3ms) UPDATE `statuses` SET `last_action_at` = '2011-10-14 10:54:47' WHERE `statuses`.`id` = 1
(0.4ms) COMMIT
(0.2ms) BEGIN
(0.6ms) UPDATE `mailboxes` SET `color` = 'B2EB3D', `updated_at` = '2011-10-14 10:54:48' WHERE `mailboxes`.`id` = 5
Mailbox Load (0.7ms) SELECT `mailboxes`.* FROM `mailboxes`
(1.2ms) COMMIT
Mailbox Load (0.4ms) SELECT id, name, open_tickets_count FROM `mailboxes`
(0.3ms) SELECT COUNT(*) FROM `tickets` WHERE `tickets`.`closed` = 0
CACHE (0.0ms) SELECT COUNT(*) FROM `tickets` WHERE `tickets`.`closed` = 0
Redirected to http://localhost:3000/settings/mailboxes
Completed 406 Not Acceptable in 29008ms
3 ответа
406 происходит, когда запрашиваемый вами тип контента не тот, на который действие знает, как ответить. Например, если действие отвечает на html и json, но вы запрашиваете js, оно не будет знать, как на него реагировать.
Если я не ошибаюсь, он сработает, но когда придет время отвечать, он отправит обратно 406.
Я не вижу форматов, указанных в вашем контроллере, но, возможно, они указаны в верхней части с помощью respond_to
или, может быть, я забыл кое-что о поведении по умолчанию.
Похоже, вы запрашиваете JS - в качестве эксперимента попробуйте обернуть это вокруг всего вашего действия:
respond_to do |format|
format.js do
# all your action code goes here...
end
end
Протестируйте добавление defaults format: :json
в вашем routes.rb
# config/routes.rb
defaults format: :json do
# Your json routes here
# resources :example ...
end
Кроме того, если вы используете responders
драгоценный камень, убедитесь, что в вашем application_controller.rb
у тебя respond_to :json
наверху.
У меня была эта ошибка, и я оказался здесь после поиска в Google. В моем случае мне не хватало шаблона, но я не получал обычную ошибку «Отсутствует шаблон». Я считаю, что это было потому, что у меня было