Jac*_*ack 8 javascript ajax ruby-on-rails ruby-on-rails-3
我有一个用户的仪表板页面,其中左侧有一个侧栏,其中包含项目,博客等链接.我希望能够单击"项目"链接等链接,然后在主区域中查看项目视图加载(视图将是项目的项目符号列表),而无需刷新页面.我试图用AJAX来实现这一点,但事情并没有奏效.
这就是我认为应该如何运作的方式.用户点击侧边栏链接show.html.erb
<%= link_to 'Projects', '/dash', remote: true %>
Run Code Online (Sandbox Code Playgroud)
where /dash配置为路由到用户#在config/routes.rb文件中显示如下:
match '/dash' => 'users#show'
Run Code Online (Sandbox Code Playgroud)
然后,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
Run Code Online (Sandbox Code Playgroud)
在哪里show.js.erb执行.我的show.js.erb文件有这一行:
$('#ajax').html("<%= escape_javascript(render(:partial => 'projects/index')).html_safe %>");
Run Code Online (Sandbox Code Playgroud)
这应该修改我的#ajax div show.html.erb:
<div id="ajax">
<%= render :template => 'projects/index' %>
</div>
Run Code Online (Sandbox Code Playgroud)
将app/views/projects/index.html.rb在@projects需要并给出了一个列表,就像这样:
<% @projects.each do |project| %>
<p><%= project.name %></p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
显然,我做错了,因为这不起作用.我究竟做错了什么?我需要在其他地方更改一些代码吗?我在Rails 3.2.13上,所以行//=jquery和//=jquery_ujs下面app/assets/javascripts/application.js应该导入必要的jQuery和AJAX功能.
Ash*_*aka 11
问题是,在您的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 %>
Run Code Online (Sandbox Code Playgroud)
此外,您不应该match在您的路线中使用,因为您几乎不需要GET和POST方法都可以访问您的路线.所以尽量使用get而不是match.
| 归档时间: |
|
| 查看次数: |
12258 次 |
| 最近记录: |