【问题标题】:AJAX call to render partial in Rails 3在 Rails 3 中渲染部分的 AJAX 调用
【发布时间】:2013-06-19 05:51:44
【问题描述】:

我有一个用户的仪表板页面,左侧有一个带有项目、博客等链接的侧边栏。我希望能够单击诸如“项目”链接之类的链接,然后在主区域中查看for 项目将加载(视图将是项目的项目符号列表),而无需刷新页面。我正在尝试使用 AJAX 来实现这一点,但没有成功。

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

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

其中/dash 配置为路由到config/routes.rb 文件中的用户#show,如下所示:

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

然后,show 操作在users_controller.rb 控制器中被调用:

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 上,所以app/assets/javascripts/application.js 下的//=jquery//=jquery_ujs 行应该已经导入了必要的jQuery 和AJAX 功能。

【问题讨论】:

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


    【解决方案1】:

    问题在于,在您的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2011-03-05
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      相关资源
      最近更新 更多