Я считаю, что ответ Нобита здесь является наиболее полным и отвечает на точный вопрос ОП. Пожалуйста, проголосуйте (@Ger).
В ответе jdoe я ожидал бы или хотел бы увидеть больше объяснений вокруг его/ее (jdoe's) использования «запроса» в своих объяснениях, поскольку «запрос» можно интерпретировать как запрос на представление (или шаблон) в других рамках, так что это заявление может быть немного вводит в заблуждении нового разработчика Rails (включая меня) при чтении с точки зрения Rails:.
«Переменные не может быть передан между запросами Я думаю, что автор получил Идея: использовать сеансы ».
В некотором смысле переменные действительно могут передаваться, когда вы запрашиваете представление/шаблон с контроллера с помощью «рендеринга». Поэтому, если ваш метод контроллера отображает представление, это представление будет знать о @variable
, которое вы определили в этом контроллере.
Кроме того, использование сеансов на самом деле не является единственным способом передачи переменной между запросами.Вы можете изменить ваш перенаправлены на маршрут, чтобы поймать переменную:
Рассмотрим (в routes.rb файле):
match 'surveys/result(/:id)' => "surveys#result", via: [:get], as: 'surveys_result'
Теперь, в «обследования» контроллера «результат» метод действия вы будете иметь :id
параметр. Вы бы назвали его params[:id]
, например, чтобы найти объект в своей базе данных с этим идентификатором. Я считаю, есть также способ скрыть :id
из URI/URL, если вы не хотите, чтобы пользователь видел его там.
@shime: В связи с вашим вопросом о «двойной записи», я считаю, что OP ссылается на визуализацию представления по запросу POST. Представьте, что если POST был успешным, вы можете отправить дублируемую запись в базу данных при каждом обновлении страницы после того, как вы уже отправили эту форму (метод перенаправления заботится о том, чтобы этого не произошло, и, таким образом, это стандартный способ на пути из ваших запросов POST) и в этом пункте я нашел имеет одну из самых ясных объяснений того, что происходит на обеих реализаций:
https://gist.github.com/jcasimir/1210155#redirect
что дубликатом представление об ошибке? redirect_to перенаправляет вас к другому действию контроллера, если у вас нет установленной переменной экземпляра, он будет терпеть неудачу. – shime
Его дубликат _record_ подчинения - в основном дубликаты данных, находящихся в базе данных. Означает ли это, что переменные экземпляра, которые я имел в одном действии контроллера, теряются после того, как я ударил другого? Есть ли способ передать переменные между этими действиями? Положить его на сеанс, может быть? Плохая практика нет? – Ger