在我的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 %>
答案 0 :(得分:1)
redirect_to show_path不起作用; “show”动作需要一个id或一个对象实例。在Rails 3中,您可以直接重定向到对象,例如redirect_to @user将默认为该对象上的show方法。您还可以使用redirect_to(:action =&gt;“show”,:id =&gt; NN)重定向到该操作,您可以手动提供ID并可选择指定控制器。或者以老式的方式redirect_to show_user_path(@user)。
答案 1 :(得分:0)
您的表单有:remote => true
,这会提示输入请求是ajax调用,因此rails会查找filter.js.rjs文件,它永远不会查找html文件。因此,当您删除rjs文件时,您会收到错误。
答案 2 :(得分:0)
让它发挥作用。问题是我的表格标签。它正在输出action="/results/filter/?remote=true"
所以我将form_tag更改为:
<%= form_tag url_for(:controller => "results", :action => "filter"), :remote => true do %>
它有效!但是,这使用HTML5,现在我将找到非HTML5的解决方法