Вот упрощенная версия того, что я пытаюсь сделать:
- Перед выполнением любых других действий предоставьте пользователю форму для извлечения строки.
- Введите строку, а затем перенаправьте на действие контроллера по умолчанию (например, индекс). Строка должна существовать только, никаких других проверок не требуется.
- Строка должна быть доступна (как переменная экземпляра?) Для всех действий в этом контроллере.
Я очень новичок в Rails, но, похоже, это не должно быть слишком сложно, поэтому я чувствую себя немного тупым.
Что я пробовал:
У меня before_filter
перенаправление на закрытый метод, который выглядит как
def check_string
if @string
return true
else
get_string
end
end
метод get_string
выглядит как
def get_string
if params[:string]
respond_to do |format|
format.html {redirect_to(accounts_url)} # authenticate.html.erb
end
end
respond_to do |format|
format.html {render :action =>"get_string"} # get_string.html.erb
end
end
Это не удалось, потому что у меня два вызова рендеринга или перенаправления в одном действии. Конечно, я могу вынести это первое respond_to
, но происходит то, что контроллер попадает в ловушку в методе get_string
. Я могу более или менее понять, почему это происходит, но я не знаю, как это исправить и вырваться. Мне нужно иметь возможность показать одну форму (View), получить и затем что-то сделать с входной строкой, а затем продолжить как обычно.
Файл get_string.html.erb
выглядит как
<h1>Enter a string</h1>
<% form_tag('/accounts/get_string') do %>
<%= password_field_tag(:string, params[:string])%>
<%= submit_tag('Ok')%>
<% end %>
Я буду благодарен за любую помощь!
EDIT
Спасибо за ответы ...
@ Лори Янг: Вы правы, я недоразумение. По какой-то причине у меня было в голове, что экземпляр любого данного контроллера, вызываемого пользователем, будет сохраняться на протяжении всего сеанса, и что некоторая магия Rails заключалась в отслеживании объектов, связанных с каждым сеансом пользователя. Я понимаю, почему в ретроспективе это не имеет большого смысла, и почему моя попытка использовать переменную экземпляра (которая, как я думал, будет сохраняться) не будет работать. Спасибо и вам:)