Rails link_to with remote:true在页面刷新后处理html而不是js

我的应用程序中有一个搜索页面,其中有一个ajax搜索表单。 搜索表单正常工作,将参数传递给模型以过滤搜索,模型返回结果集合。 搜索提交后,@results将在页面上呈现。 然后每个@result都有一个指向它的动作的链接,例如:

 user.id), :remote => true%> 

控制器中的此操作位于:

 respond_to :js, :html def message @user_id = params[:id] @user = User.find_by_id(@user_id) respond_to do |format| format.html format.js end end 

这会响应message.js.erb,它会触发一个消息传递面板,向用户弹出一条消息。 所有这一切都正常,检查日志我看到发送的正确的get请求,以及正在处理的正确格式:

 Started GET "/users/3/message" Processing by UsersController#message as JS 

但是,如果我刷新页面并尝试单击之前工作的相同链接,则会收到错误模板缺失的错误。 检查日志,我看到现在发送了两个请求,首先是一个html,然后是相同的js请求。

 Started GET "/users/4/message" Processing by StudentsController#message as HTML ... Completed 406 Not Acceptable in 3ms (ActiveRecord: 1.0ms) Started GET "/users/4/message" Processing by StudentsController#message as JS 

html请求抛出了丢失的模板错误。 有谁知道为什么刷新页面导致rails试图用html请求响应远程链接?
编辑:routes.rb

 resources :students do member do get 'message' end end 

你的app/assets/javascripts/application.js包含

 //= require jquery //= require jquery_ujs 

你的erb包含<%= javascript_include_tag "application" %>

我只是在为HOURS这样的问题挣扎,并且这两点的最后一点修复了它; 我在其他一些问题中看到了第一点,所以我将在这里重复一遍。

希望有所帮助。

( 信用到期的信用 )

它对我来说是什么解决方案:format =>“js”

所以在你的情况下:

 <%=link_to "Message", message_user_path(:id => user.id, :format => "js"), :remote => true %> 

通常,当您在特定按钮上使用link_to时,按下按钮时, as js请求将发送到控制器,但也会搜索相应的.js.erb文件,依此类推。