ActionController::UnknownFormat в Devise::RegistrationsController#new. .user добавлено в URL

Я работал с devise раньше, но я не могу понять, что я сделал не так на этот раз. Все связанные вопросы также не объясняют это. Как только я нажимаю на ссылку SignUp, я получаю следующую ошибку

ActionController::UnknownFormat in Devise::RegistrationsController#new

в строке номер 207

(options.delete(:responder) || self.class.responder).call(self, resources, options)
  else
207: raise ActionController::UnknownFormat
  end
end

Однако, если я изменю свою ссылку с

  <%= link_to "Sign up", new_user_registration_path(resource_name) %>

to

  <%= link_to "Sign up", new_user_registration_path %>

страница регистрации загружается нормально. Еще одна вещь, которую следует отметить, это то, что когда я нажимаю на ссылку регистрации, мой URL-адрес выглядит как http://localhost:3000/users/sign_up.user, а не как http://localhost:3000/users/sign_up, что должно быть так.

Я сослался на Rails 4 Devise 3.1.1 ActionController::UnknownFormat в Devise ::RegistrationsController#new и нашел идею удалить имя_ресурса, и, кажется, это работает. Однако я не могу понять, почему. Заранее спасибо


person Aakanksha    schedule 25.03.2016    source источник


Ответы (1)


Когда вы передаете ресурс в метод пути, такой как new_user_registration_path, Rails попытается направить к действию для этого ресурса и интерполировать его в маршрут. Поскольку у вас нет маршрута, который имеет сопоставление для определенного для него ресурса, Rails вместо этого просто добавит .<resource.to_param> в конец URL-адреса. Очевидно, это не то, что вам нужно, поскольку регистрация не требует ресурсов.

Причина, по которой вы получаете это конкретное исключение, заключается в том, что, поскольку devise пытается ответить на несколько типов ответов (html, json, xml и т. д.), он анализирует .user как тип, который вы хотите получить, отсюда и неизвестная ошибка формата.

person tpbowden    schedule 25.03.2016
comment
я не понимаю. Мой new_user_registration_path указывает на регистрацию/новую, тогда почему он не соответствует пути. - person Aakanksha; 25.03.2016
comment
Он сделал это, но попытался ответить на несуществующий формат ответа .user. resource_name.to_param – это user, поэтому оно было добавлено к URL-адресу. - person tpbowden; 25.03.2016
comment
хорошо .. вроде бы имеет смысл, но как я могу гарантировать, что приложение не использует имя_ресурса.to_param? Извините, что задаю такие глупые вопросы, но, пожалуйста, потерпите меня, я новичок в рельсах. - person Aakanksha; 25.03.2016
comment
просто не передавайте никаких аргументов методу new_user_registration_path в будущем. - person tpbowden; 25.03.2016
comment
Да, я подумал, что удаление параметра решит проблему. Теперь я тоже понимаю, почему. Благодарю вас :) - person Aakanksha; 26.03.2016