我的应用中有一个搜索页面,其中有一个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响应,它触发消息传递面板以向用户弹出消息。所有这一切都正常,检查日志我看到发送的正确的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
答案 0 :(得分:25)
您的app/assets/javascripts/application.js
是否包含
//= require jquery
//= require jquery_ujs
你的erb包含<%= javascript_include_tag "application" %>
?
我只是在为HOURS这样的问题挣扎,而这两点的最后一点修正了它;我在其他一些问题中看到了第一点,所以我在这里重复一遍。
希望有所帮助。
答案 1 :(得分:4)
它对我来说是什么解决方案:format =&gt; “JS”
所以在你的情况下:
<%=link_to "Message", message_user_path(:id => user.id, :format => "js"), :remote => true %>
答案 2 :(得分:0)
通常,当您在特定按钮上使用link_to
时,按下按钮时,as js
请求会发送到控制器,但也会搜索相应的.js.erb文件等等。
答案 3 :(得分:0)
我的解决方案是更换
format.json do
使用
format.js do
您可以通过在控制器中设置断点(我使用pry)然后查看变量来解决请求
request.format