1

为了进一步解释,我的 Rails 应用程序布局中有以下代码:

<!-- Stuff omitted -->
<% unless flash.empty? %>
  <%= flash.each do |name, msg| %>
    <%= content_tag :div, msg, :id => "flash_#{name}" %>
  <% end %>
<% end %>
<%= yield %>

对于控制器:

#stuff omitted
def create
  user = User.authenticate(params[:email], params[:password])
  if user
    session[:user_id] = user.id
    redirect_to root_url, :notice => "Logged in!"
  else
    flash.now.alert = "Invalid email or password"
    render :new
  end
end

好的,所以,如果我碰巧未能通过身份验证,这就是我在浏览器中看到的:

content_tag 错误?

你们能告诉我为什么哈希({:alert =>“无效的电子邮件或密码”})出现在消息下方吗?我真的不知道出了什么问题,

(顺便说一句,这取自 Rails Casts #250)

4

3 回答 3

4

只需从循环开头删除等号:

<!-- Stuff omitted -->
<% unless flash.empty? %>
  <% flash.each do |name, msg| %>
    <%= content_tag :div, msg, :id => "flash_#{name}" %>
  <% end %>
<% end %>
<%= yield %>

因为它告诉 ERB 打印整个flash变量。

于 2011-11-08T14:39:48.300 回答
1

看起来消息最终成为哈希。尝试像这样设置 Flash 消息:

flash[:alert] = "Invalid email or password"
于 2011-11-08T14:28:45.283 回答
0

您可以尝试以下方法:

  • application.html.erb可以写:

    <% unless flash.empty? %>
      <% flash.each do |name, msg| %>
        <%= content_tag :div, msg, class: "alert alert-#{name}" %>
      <% end %>
    <% end %>
    <%= yield %>
    
  • 在控制器中,您可以编写:

    flash[:danger] = "Invalid email or password"

于 2017-06-07T12:19:35.240 回答