【问题标题】:Template is missing when using redirect_to?使用redirect_to 时缺少模板?
【发布时间】:2011-08-25 14:02:49
【问题描述】:

在我的 Rails 3 应用程序中,我有一个结果控制器。当我在 show.html.erb 页面上使用控制器中的 show 操作时,我有一个指向过滤器操作的链接。过滤操作完成后,我希望它重定向回 show.html.erb,但由于某种原因,它一直说 Template is missing Missing template results/filter 。我使用 ajax,所以有一个 fitler.js.rjs 文件,但我无法弄清楚。如果我删除 filter.js.rjs 文件,它会给我Unknown action The action 'filter' could not be found for ResultsController

这是我的结果操作代码。任何帮助表示赞赏。

def filter
            @dispatches = Dispatch.find_by_message_ids(params[:message_ids]) unless params[:message_ids].blank?

            unless @dispatches.blank? || @input_messages.blank?
            @output_messages = OutputMessage.find_by_dispatch_ids(
                                              @dispatches.collect{|d| d.id }.uniq
                                              )
            end

            respond_to do |format|
                  format.html { redirect_to show_path }
                  format.js
            end
    end

更新

这是调用过滤器操作的 show.html.erb 上的代码

<%= form_tag(:controller => "results", :action => "filter", :remote => true) do %>

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    redirect_to show_path 不起作用; "show" 动作需要一个 id 或一个对象实例。在 Rails 3 中,您可以直接重定向到一个对象,例如redirect_to @user 默认为该对象的 show 方法。您还可以使用 redirect_to(:action => "show", :id => NN) 重定向到操作,您可以在其中手动提供 id 并可选择指定控制器。或者以老式的方式重定向_到 show_user_path(@user)。

    【讨论】:

    • 是的,所以我将show_path 切换到:action =&gt; "show" 并且仍然没有工作,所以我将整个过滤器块移动到显示块上方,现在它可以工作了。很奇怪。但是现在又出现了另一个错误..Render and/or redirect were called multiple times in this action. Please note... 因为节目在错误时使用了重定向.. 是否可以告诉 Rails 在重定向后绕过任何重定向?
    • 你能用新代码更新你上面的例子或者给我们一个要点吗?
    • 我遇到了一堆问题。我会尝试解决问题,然后可能会提出一个新问题.. 感谢您的帮助
    【解决方案2】:

    你的表单有:remote =&gt; true,这会提示rails传入的请求是一个ajax调用,因此rails会寻找filter.js.rjs文件,它永远不会寻找html文件。因此,当您删除 rjs 文件时,您会收到错误消息。

    【讨论】:

    • 是的,但是有一个 filter.js.rjs 并且它仍然给我找不到模板。
    • 在任何地方都可以调用局部吗?
    • 是的。 filter.js.rjs 的内容如下:page.insert_html :top, :fitler, :partial =&gt; "fiter"
    • 另外,我将过滤器操作块移到显示操作上方,我收到错误Render and/or redirect were called multiple times in this action. Please ....
    • 尝试为你的部分提供详细的路径。
    【解决方案3】:

    让它工作。问题是我的表单标签。它正在输出action="/results/filter/?remote=true",所以我将 form_tag 更改为:

     <%= form_tag url_for(:controller => "results", :action => "filter"), :remote => true do %>
    

    它奏效了!但这使用 HTML5,现在我要为非 HTML5 找到解决方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2012-05-09
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多