我正在尝试在重定向上显示Flash消息,但在显示它时遇到一些麻烦。
我想要发生的是在保存电子邮件后我们会显示一条消息。以下是我试图这样做的几种不同方式。
控制器设置 - 我尝试使用以下方法中显示的两种不同方式设置闪光灯。 puts声明正在被击中。
def subscriber_email_landing_page
email = Email.create(email: subscriber_email_params[:email], subscriber_type: 'mtb-landing-page')
if email.save
puts 'hit flash'
flash[:notice] = "Post has been saved successfully."
redirect_to mountain_bike_path, flash: { notice: 'hey'}
end
end
不同的方式我试图在视图中显示闪光灯:
<%= flash[:notice] %>
<% flash.each do |key, value| %>
<%= content_tag :div, value, class: "flash #{key}" %>
<% end %>
<% if !flash.empty? %>
<% puts 'flash working' %>
<p>hey how are ya</p>
<% end %>
我觉得我有一些明显缺失的东西。有人可以提供一些经验丰富的铁路建议吗?
答案 0 :(得分:0)
这就是我目前在Rails应用程序中设置闪存的方法
在app / helpers / application_helper.rb
中module ApplicationHelper
# bootstrap flash notifications
def flash_class(level)
case level
when 'notice' then "alert alert-info"
when 'success' then "alert alert-success"
when 'error' then "alert alert-danger"
when 'alert' then "alert alert-warning"
end
end
end
在app / views / shared / _flash.html.erb
中<% flash.each do |key, value| %>
<div class="<%= flash_class(key) %>">
<%= value %>
</div>
<% end %>
在控制器中调用flash的示例
def require_user_signin
unless current_user
# stores url in the session that the user was trying to go to before being redirected
session[:intended_url] = request.url
redirect_to new_session_url
flash[:error] = "please sign in first!"
end
end
或
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id # creates session to login user
flash[:success] = "Hi #{@user.first_name.capitalize}, thanks for creating an account!"
redirect_to user_url(@user.id)
else
render 'new'
end
end
在视图中
<%= form_for(@job) do |f| %>
<%= render 'shared/flash' %>
<%= render 'shared/errors', object: @job %>
可能也希望对此参考https://www.railstutorial.org/book/_single-page#sec-the_flash
进行检查