javascript - AJAX 调用以在 Rails 3 中呈现部分

标签 javascript ruby-on-rails ajax ruby-on-rails-3

我有一个用户的仪表板页面,左侧有一个带有项目、博客等链接的边栏。我希望能够单击一个链接,例如“项目”链接,然后在主区域中, View 对于项目将加载( View 将是项目的项目符号列表)而无需刷新页面。我正在尝试使用 AJAX 实现这一目标,但没有任何效果。

这是我认为它应该工作的方式。用户点击 show.html.erb 中的侧边栏链接

<%= link_to 'Projects', '/dash', remote: true %>

哪里/dash配置为路由到 config/routes.rb 中的用户#show像这样的文件:

match '/dash' => 'users#show'

然后,showusers_controller.rb 中调用操作 Controller :

def show
    @user = User.find(params[:id])
    @projects = @user.projects

    respond_to do |format|
      format.html # renders show.html.erb
      format.js   # renders show.js.erb
    end
end

在哪里show.js.erb被执行。我的show.js.erb文件有这一行:

$('#ajax').html("<%= escape_javascript(render(:partial => 'projects/index')).html_safe %>");

这应该修改我的 show.html.erb 中的#ajax div :

<div id="ajax">
  <%= render :template => 'projects/index' %>
</div>

app/views/projects/index.html.rb接受@projects 并给出一个列表,如下所示:

<% @projects.each do |project| %>
  <p><%= project.name %></p>
<% end %>

显然,我做错了,因为这不起作用。我究竟做错了什么?我需要在其他地方更改一些代码吗?我在 Rails 3.2.13 上,所以行 //=jquery//=jquery_ujsapp/assets/javascripts/application.js 下应该已经导入了必要的 jQuery 和 AJAX 功能。

最佳答案

问题在于,在您的 show.js.erb 文件中,您正试图呈现部分内容,但您传递给它的文件不是部分内容。部分文件以下划线 _ 开头。

所以,为了避免重复代码,我会这样做:

# app/views/projects/show.js.erb
$('#ajax').html("<%= escape_javascript(render :partial => 'index', :locals => { :projects => @projects } ) %>");

# app/views/projects/index.html.erb
<%= render :partial => 'index', :locals => { :projects => @projects } %>

# app/views/projects/**_**index.html.erb
# Include here the code that you previously had in index.html.erb
# Don't forget to change @projects to projects
<% projects.each do |project| %>
  <p><%= project.name %></p>
<% end %>

此外,您不应在路由中使用 match,因为您几乎永远不需要通过 GET 和 POST 方法访问您的路由。所以尽量使用 get 而不是 match

关于javascript - AJAX 调用以在 Rails 3 中呈现部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246411/

相关文章:

javascript - 如何使用 Electron 实现基于 Active Directory 的 SSO?

javascript - 为什么我的计算功能不起作用?

ruby-on-rails - 设计-确认不发送电子邮件

ruby-on-rails - 如何在页面之间显示页面加载

python - Bootstrap 弹出窗口中的 Django 登录表单

javascript - 停止从单击处理程序传播 mousedown/mouseup

javascript - JQuery 选项卡 : How to display a 'Loading...' message' on waiting an AJAX HTTP request response?

ruby-on-rails - Jasmine 未加载 Assets 管道

php - Ajax Onchange 在 foreach 循环内

javascript - DataTables 将源数组封装到 JSON 'data' 属性中