我有一个链接应该使用ajax加载它旁边的部分而不重新加载页面。这是链接:
<%= link_to 'test ajax link', profile_form_path , remote: true %>
这是链接应该转到的控制器:
class ProfilesController < ApplicationController
def profile_form #the action is currently static so there is nothing in the controller
end
end
以下是控制器操作的js视图:
profile_form.js.erb
$('.tab-edit-profile').html("<%= j render 'profile_form_p' %>");
然而,它不起作用。浏览器返回此错误:
Template is missing
Missing template profiles/profile_form
以下是路线文件中的行:
get 'profile_form', to: 'profiles#profile_form'
如果我将文件名更改为profile_form.html.erb,页面会加载,但显然不会使用ajax。谁能告诉我使用ajax实现这个的正确方法?感谢。
答案 0 :(得分:1)
根据您在上面发布的内容,这应该可以正常工作。我唯一能想到的是你没有包含所需的javascript库,link_to
帮助器实际上并没有发出AJAX请求。
您表示您正在使用Rails 4,所以我假设您也在使用资产管道。请确保您的app/assets/javascripts/application.js
文件
//= require jquery
//= require jquery_ujs
并且javascript被包含在ProfilesController
使用的布局中。假设布局为application.html.erb
,请确保您有
<%= javascript_include_tag "application" %>
在布局的<head>
部分。
答案 1 :(得分:-1)
您需要的是部分内容,例如_profile.html.erb
。下划线告诉Rails这个文件被渲染为部分文件。在您的profile_form.js.erb
中,您可以尝试。
$('.tab-edit-profile').html("<%= escape_javascript(render 'profile') %>");
这应该让你使用静态内容。对于动态,请设置@profile
实例变量并尝试。
$('.tab-edit-profile').html("<%= escape_javascript(render @profile) %>");
请务必在控制器响应中使用render json: @profile
。