#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1
#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1
Вопрос:
У меня есть этот код :
def create
login(params[:email], params[:password])
if current_user
flash[:notice] = "Welcome back #{current_user.email}"
return redirect_to_first_page
else
flash[:notice] = "Email or password is wrong. Try again !"
redirect_to root_url
end
end
при успешном входе в систему устанавливается flash и выполняется перенаправление на первую страницу.
Эта часть работает. Вторая часть не устанавливает сообщение о флэш-уведомлении. Затем, когда страница отображается, сообщение от flash не отображается. Что отличается от того, что я пытался иметь
return redirect_to root_url
но ничего по-прежнему ничего не показывает.
В моем контроллере у меня есть помощник, такой как flash_notice, все, что он делает, это возвращает flash [: notice] .
Это потому, что флэш-память всегда пуста в представлении, но доступна в контроллере.
В представлении у меня есть только одна строка :
<%= flash_notice %>
Я использую rails 3.1
Комментарии:
1.
redirect_to root_url, :notice => "Email or password is wrong. Try again !"
Работает ли?2. Используйте только
notice
вместоflash_notice
3. @hock,
flash_notice
это метод на контроллере, определенный OP4. Может быть, случайно происходит другое перенаправление? Может быть, попробуйте использовать
flash[:notice]
непосредственно в представлении? Попробуйте распечататьflash
на разных этапах в соответствующих контроллерах и представлениях.5. Я не могу использовать flash[:notice] в представлении, потому что в частичном представлении равно нулю. Я попробовал <%= «flash равен нулю», если flash == nil %>, что было правдой. Единственный способ, которым это сработало для меня, — создать вспомогательный метод в базовом контроллере (например, flash_notice), который возвращает flash[:notice] .
Ответ №1:
Крис Драппье прав, хэш флэш-памяти является текущим только для одного запроса. Вы можете вызвать метод «keep» с помощью
flash.keep[:notice]="This message will persist"
Лично мне нравится сохранять флэш-память, о которой идет речь, в параметрах, когда это необходимо. Кровавые подробности здесь:
http://guides.rubyonrails.org/action_controller_overview.html#the-flash