Приветственное флеш сообщение после регистрации? - PullRequest
1 голос
/ 17 февраля 2012

Когда пользователи регистрируются в моем приложении, на главной странице появляется приветственное сообщение с использованием столбца Devise sign_in_count.

def home
 if current_user.sign_in_count == 1 
  flash.now[:notice] = "Welcome!"
 end
end

Единственная проблема, однако, заключается в том, что она остается там до тех пор, пока они не выйдут и не войдут обратно. Как я могу сделать так, чтобы он отображался только один раз и исчезал при обновлении или изменении страницы?Есть ли способ сделать это?

Спасибо.

РЕДАКТИРОВАТЬ

application.html.erb

<body>
 <div class="container">
   <%= render "shared/flash_message" %>
    <%= yield %>
 </div>
</body>

_flash_message.html.erb

<% [:notice, :error, :alert].each do |level| %>
 <% unless flash[level].blank? %>
  <div class="span12">
   <div class="<%= flash_class(level) %> fade in">
    <a href="#" data-dismiss="alert" class="close">×</a>
     <%= content_tag :p, flash[level] %>
   </div>
  </div>
 <% end %>
<% end %>

Ответы [ 2 ]

5 голосов
/ 17 февраля 2012

В вашем layouts/application.html.erb должно быть что-то вроде этого:

<% flash.each do |key,  value| %>
<%= content_tag(:div, value, class: "flash #{key}") %>
<% end %>

Поступая таким образом, должен работать так, как вы ожидаете.

EDIT

Что если вы проверите, что current_user уже установлено?

def home
 if current_user && current_user.sign_in_count == 1 
  flash.now[:notice] = "Welcome!"
 end
end

РЕДАКТИРОВАТЬ 2

OK! Понял! Столбец sign_in_count с Devise будет оставаться неизменным до следующего входа в систему, поэтому он всегда будет отображать сообщение Welcome!. Чтобы сделать это так, как вы ожидаете, вы должны создать на нем флаг.

def home
 if current_user && current_user.sign_in_count == 1
  unless session[:display_welcome]
    flash.now[:notice] = "Welcome!"
    session[:display_welcome] = true
  end
 end
end

Вы можете попробовать использовать session или cookies.

1 голос
/ 17 февраля 2012

Если пользователь входит в систему впервые, измените логику для сравнения against 0.После установки флеш-сообщения обновите sign_in_count до 1,

def home
 if current_user.sign_in_count == 0 
  flash.now[:notice] = "Welcome!"
  current_user.update_attribute(:sign_in_count, 1)
 end
end
...