【问题标题】:Index action not displaying flash notices索引操作不显示 Flash 通知
【发布时间】:2013-09-14 16:10:08
【问题描述】:

我有一个带有销毁操作的 trackers_controler。我正在尝试将销毁操作重定向到销毁时的索引,因为所有这些跟踪器都显示在索引的汇总表中。

在我的销毁操作中,当我重定向到 tracker_url 时,我的 flash 通知会正确显示。但是 URL 有 id(应该这样)

 redirect_to tracker_url, :notice => "Tracker Disabled!"
 redirect with the flash notice displaying
 /trackers/trackers/5

当我使用下面的重定向重定向到索引时,它会在 url 中显示 flash 通知,但不会在消息中显示 flash 通知。

redirect_to :action => index, :notice => "Tracker Disabled!"
redirects without the flash notice
/trackers?notice=Tracker+Disabled%21

为了调试,我从 index.html.erb 和 show.html.erb 复制了代码,这样它们是相同的,并且仍然将 flash 通知作为 url 的一部分,即使它们都在同一个地方。消息的部分位于 layouts/messages 文件夹中

<%= render 'layouts/messages' %>

以下是我的节目和索引

def index
   authorize! :view, :silver, :message => 'Access limited to Silver Plan subscribers.'

   @new_tracker = Tracker.new
   @current_user = current_user
   @trackers_enabled = Tracker.enabled.where(:user_id => @current_user.id)
   @trackers_disabled = Tracker.disabled.where(:user_id => @current_user.id)
 end

def show
   authorize! :view, :silver, :message => 'Access limited to Silver Plan subscribers.'

  @new_tracker = Tracker.new
  @current_user = current_user
  @trackers_enabled = Tracker.enabled.where(:user_id => @current_user.id)
  @trackers_disabled = Tracker.disabled.where(:user_id => @current_user.id)
end

从我的开发日志来看,这里是重定向后的帖子

SHOW

重定向到 /trackers/1 完成 302 Found in 19ms (ActiveRecord: 13.8ms)

在 2013 年 9 月 14 日 11:06:06 -0500 开始为 127.0.0.1 获取“/trackers/1” 由 TrackersController#show 处理为 HTML 参数:{"id"=>"1"}

INDEX

重定向到 /trackers?notice=Tracker+Disabled%21 完成 302 Found in 19ms (ActiveRecord: 13.5ms)

在 2013-09-14 11:06:51 -0500 开始 GET "/trackers?notice=Tracker+Disabled%21" for 127.0.0.1 由 TrackersController#index 处理为 HTML 参数:{"notice"=>"Tracker Disabled!"}

【问题讨论】:

    标签: ruby ruby-on-rails-3 ruby-on-rails-3.2 routing controllers


    【解决方案1】:

    这条线有问题

    redirect_to :action => index, :notice => "Tracker Disabled!"
    

    notice 部分成为代码中#index 的参数,而不是redirect_to 的参数。

    要修复,请使用命名路径。假设你的索引页路径是trackers_path,那么

    redirect_to trackers_path, :notice => "Tracker Disabled!"
    

    【讨论】:

    • 在特定控制器的上下文中,通常希望不必重述要重定向到的整个路径。在这种情况下,将路径哈希与选项区分开来将完成此操作:redirect_to({ :action =&gt; index }, :notice =&gt; "Tracker Disabled!")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多