Ответ 1
Вы просто определяете его на пустую строку в локальном файле. В этом случае вы ничего не видите.
Используя Devise, я хотел бы знать, есть ли способ удалить конкретное флэш-сообщение? (Подпись успешно).
Мне нравится другой msg в представлении, так что это только для подписанного и подписанного. Я должен был перезаписать контроллер или есть другой способ?
Спасибо!
Вы просто определяете его на пустую строку в локальном файле. В этом случае вы ничего не видите.
Ok!
Как сказал Шингара, я определяю пустую строку в devise.en.yml
sessions:
signed_in: ''
и я также немного изменил следующую строку (предоставляемую отличными генераторами):
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash" if msg.length > 0 %>
<% end %>
Таким образом, мой css не появляется.
Пустая строка в файле локали (как предложено выше), но также добавьте следующий снимок CSS, чтобы скрыть (вместо обезьяны с вашими флэш-представлениями)
.flash.alert:empty {
display: none;
}
Другим гибким способом для этого является удаление уведомления после действия:
class SessionsController < Devise::SessionsController
after_action :remove_notice, only: :destroy
private
def remove_notice
flash[:notice] = nil
end
end
С помощью этого решения вы можете добавить условия для удаления или отсутствия уведомления.
Другой способ: если вы переопределите контроллер Devise, в действии create, поместите этот код, который удаляет флеш-сообщение:
class MyDevise::SessionsController < Devise::SessionsController
# POST /resource/sign_in
def create
super
flash.delete(:notice)
end
# DELETE /resource/sign_out
def destroy
super
flash.delete(:notice)
end
end
на это был дан ответ в этом другом вопросе SO. Для сообщения в блоге о том, как переопределить контроллер Devise, см. мой пост в блоге
С моей точки зрения, я не вижу смысла опустошать строковый перевод, когда вы можете легко изменить, как работает контроллер. Думаю, этот способ намного правильнее и удовлетворительнее.
Лучшим ответом может быть переопределение метода destroy в sessionController.
Просто создает файл, помещенный в: app/controllerlers/sessions_controller.rb
Как вы можете видеть, мы прокомментируем строку, создающую флеш-сообщение.
class SessionsController < Devise::SessionsController
# DELETE /resource/sign_out
def destroy
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
#set_flash_message :notice, :signed_out if signed_out && is_flashing_format?
yield if block_given?
respond_to_on_destroy
end
end
Я думаю, что теперь разработчик понимает, что если вы измените сообщение об ошибке в config/locals/devise.en.yml
на пустую строку, оно автоматически проигнорирует его. По крайней мере, то, что сработало со мной.
Вы можете сделать это, добровольно измените тип условия и тип вспышки соответственно.
flash.delete(: alert), если flash [: alert] == "Вам нужно войти или зарегистрироваться, прежде чем продолжить". @drivers = params [: keyword].blank?? []: Driver.find(params [: keyword])
Вы можете сделать это перед фильтром.