Rails - 使链接与ajax一起工作

时间:2014-01-07 21:25:07

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-4

我有一个链接应该使用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实现这个的正确方法?感谢。

2 个答案:

答案 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