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 => "Invalid email or password"}) が表示される理由を教えてください。何がいけないのか、まったくわからないのですが、

(ところで、これは 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[:alert] = "Invalid email or password"
于 2011-11-08T14:28:45.283 に答える