我的应用程序中有一个搜索页面,其中有一个 ajax 搜索表单。搜索表单正常工作,将参数传递给模型以过滤搜索,模型返回结果集合。搜索提交后,@results 会在页面上呈现。然后每个@result 都有一个指向其上的操作的链接,例如:
<%=link_to "Message", message_user_path(:id => 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 进行响应,这会触发消息面板弹出给用户的消息。所有这些都正常工作,检查日志我看到发送了正确的获取请求,并且正在处理正确的格式:
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