Rails POST не извлекает параметры пути, запроса или запроса - PullRequest
1 голос
/ 27 ноября 2010

Я хочу предоставить пользователям доступ к моему API (размещенному на heroku.com) со своих сайтов.Но возникает странная проблема, когда я хочу разрешить им публиковать в API:

Данные, отправленные из правильной формы с правильным URL-адресом действия (например, "http://myapp.com/projects/123/tasks/321/todos") - параметры сериализуются и отправляются черезjQuery - я сталкиваюсь с «ActionController :: MethodNotAllowed» с дополнительной информацией: «Разрешены только запросы на получение и публикацию», который перенаправляет на ApplicationController # index с: method =>: options.

Rails не делаетизвлеките параметры для project_id (123) и task_id (321) из URL-адреса, также не доступны никакие дополнительные параметры request_parameters, path_parameters или query_parameters.

Это происходит, когда я отправляю POST с внешних сайтов, но не происходит, при публикации с html-страницы на моем локальном компьютере. Первая мысль была о неправильной кодировке, но о том, как исправить эту проблему.

Редактировать: я использую authlogic (не devise :-D) и для: создать действие, protect_from_forgery уже пропущено.

Любые предложения приветствуются

Ответы [ 3 ]

0 голосов
/ 27 ноября 2010

Хорошо. На этот раз я постараюсь ответить на правильный вопрос (см. Другой комментарий).

Итак, я подумал об этом, и мне интересно, это тот случай, когда вызов jQuery пытается выполнить запрос PUT? Когда вы используете локальную форму, Rails будет POST-данные, но добавит дополнительное поле _method для эмуляции PUT.

Не знаю, используете ли вы jquery-rails , но это заботится о настройке параметра _method и перевода глагола PUT / POST для вас в вызовах AJAX.

0 голосов
/ 26 октября 2012

Проблема возникла из-за междоменной политики - запрос был сделан из другого домена - и поскольку я использовал недавний браузер, поддерживающий CORS , он сначала отправлял OPTIONS-запрос, чтобы получить известностьс сервера, какие действия разрешены для этого домена.

0 голосов
/ 27 ноября 2010

Полагаю, это происходит потому, что рельсы пытаются защитить ваши CSRF-атаки.

Вы можете закомментировать строку protect_from_forgery в вашем ApplicationController, чтобы протестировать ее.

но я не уверен, что это правильный способ решения этой проблемы в производственной среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...