Javascript AJAX调用在Rails 3中呈现局部

Javascript AJAX调用在Rails 3中呈现局部,javascript,ruby-on-rails,ajax,ruby-on-rails-3,Javascript,Ruby On Rails,Ajax,Ruby On Rails 3,我有一个用户的仪表板页面,左侧有一个侧栏,其中包含项目、博客等链接。我希望能够单击“项目”链接等链接,然后在主区域中,项目视图将加载(视图将是项目的项目列表),而无需刷新页面。我正试图用AJAX实现这一点,但一切都不起作用 我想应该是这样的。用户单击show.html.erb <%= link_to 'Projects', '/dash', remote: true %> 然后,在users\u controller.rbcontroller: def show @user

我有一个用户的仪表板页面,左侧有一个侧栏,其中包含项目、博客等链接。我希望能够单击“项目”链接等链接,然后在主区域中,项目视图将加载(视图将是项目的项目列表),而无需刷新页面。我正试图用AJAX实现这一点,但一切都不起作用

我想应该是这样的。用户单击
show.html.erb

<%= link_to 'Projects', '/dash', remote: true %>
然后,在
users\u 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 %>");
app/views/projects/index.html.rb
接收@projects并给出如下列表:

match '/dash' => 'users#show'
<% @projects.each do |project| %>
  <p><%= project.name %></p>
<% end %>


显然,我做错了事情,因为这不起作用。我做错了什么?是否有一些代码需要在其他地方更改?我在轨道3.2.13上,因此,
app/assets/javascripts/application.js
下的
/=jquery
/=jquery\u ujs
行应该已经导入了必要的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 %>
#app/views/projects/show.js.erb
$('#ajax').html('index',:locals=>{:projects=>@projects})%>”;
#app/views/projects/index.html.erb
'index',:locals=>{:projects=>@projects}%>
#app/views/projects/**index.html.erb
#这里包括您以前在index.html.erb中使用的代码
#不要忘记将@projects更改为projects

另外,您不应该在路由中使用
match
,因为您几乎不需要GET和POST方法都可以访问路由。因此,尝试使用
get
而不是
match

# 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 %>