ruby Rails 7 flash错误未在application.html.erb中显示

xggvc2p6  于 2023-03-17  发布在  Ruby
关注(0)|答案(2)|浏览(101)

在我的Rails7应用程序中有一个警报没有显示的问题。
但是notices是。
我使用<%= alert %>application.html.erb中显示警报

<%= render partial: "shared/navbar" %>
<div class="px-6">
  <div class="mt-6"></div>
  <div>

    <% if notice %>
      <div class="notification is-success is-light text-center">
        <%= notice %>
      </div>
    <% end %>

    <% if alert %>
      <% debugger %>
      <div class="notification is-danger is-light text-center">
        <%= alert %>
      </div>
    <% end %>

    <%= yield %>
  </div>
</div>

我在控制器操作中添加了一个“FAILED”记录器,我在Rails日志中看到了这个记录器,这向我证明我们确实陷入了“else”条件,并且new页面在创建新对象失败时呈现,但是我没有看到警告消息。

def create
@rescue = AnimalRescue.new(rescue_params)

respond_to do |format|
  if @rescue.save
    format.html { redirect_to animal_rescue_url(@rescue), notice: "Rescue was successfully created." }
    format.json { render :show, status: :created, location: @rescue }
  else
    Rails.logger.info "FAILED"
    format.html { render :new, status: :unprocessable_entity, alert: "Unable to create rescue." }
    format.json { render json: @rescue.errors, status: :unprocessable_entity }
  end
end

结束

agyaoht7

agyaoht71#

format.html { render :new, status: :unprocessable_entity, alert: "Unable to create rescue." }
# NOTE:                              not a render option  ^^^^^^

:alert:noticeredirect_to方法的选项,设置了对应的flash消息:

flash[:alert] = "Unable to create rescue."

另外,flash只会在重定向后的下一个请求中显示。要在当前请求中显示flash消息,您必须使用flash.now

format.html do
  flash.now.alert = "Unable to create rescue."
  render :new, status: :unprocessable_entity
end

如果表单位于turbo框架内,则需要在框架内显示警报。

v440hwme

v440hwme2#

你太复杂了。使用相同的逻辑来显示各种各样的flash消息会更容易、更灵活,因为唯一需要改变的是一个CSS类:

<% flash.each do |type, msg| %>
  <%= tag.div msg, 
              class: [
                {
                   notice: 'is-success',
                   alert: 'is-danger'
                   # etc
                }.fetch(type.to_sym, type.to_s), 
                "notification", 
                "is-light", 
                "text-center"
              ]
  %>
<% end %>

flash毕竟只是一个简单的包含字符串. KISS的哈希对象。

相关问题