Rails 3:jquery改变部分

try*_*000 2 ajax jquery ruby-on-rails ruby-on-rails-3

rails newbie herem,我想学习一些关于jquery的东西,所以我想我会尝试使用AJAX在我的部分视图之间切换.

现在在我的用户短划线上我有一个指向他们'喜欢'页面的链接,它需要完全重新加载才能看到'喜欢'页面,我如何更改这个以使用likes_user_path @用户刷新?

视图/页/ home.html.erb

  <div id="left">
    <div id="dash-statistics">
       <a href="<%= likes_user_path(@user) %>">
         <div id="likes" class="stat">Likes
           <%= @user.likes.count %>
         </div>
       </a>
    </div>
  </div>

  <div id="right">
    <div id="content">
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

UsersController

  def likes
    @title = "Likes"
    @user = User.find(params[:id])
    @like_stuff = @user.likes.paginate(:page => params[:page])
    render 'show_likes' 
  end
Run Code Online (Sandbox Code Playgroud)

And*_*i S 8

我的理解是,您希望likes通过在用户仪表板中使用ajax单击链接来重新加载.

首先要做的是重写链接,并添加:remote => true如下:

<%= link_to "Likes", likes_user_path(@user), :remote => true %>
Run Code Online (Sandbox Code Playgroud)

然后,在你的控制器中,确保你有一个respond_to :html, :js顶部(当然可以有其他选项,但:js必须在其中)

在那之后,你可以likes在你的控制器中调用一个用于加载喜欢的函数,这些函数看起来像你的,只有你最后不做render,但是respond_with @likes.通过其:jsrespond_to过滤器,Rails会自动地相应应该采取行动的时候.

接下来,制作一个相应的视图likes.js.erb(我不确定coffeescript是否可以在这种情况下开箱即用),你可以在其中放置类似的东西

$('#likes').html('<%= escape_javascript(render "likes", :likes => @likes) %>');
Run Code Online (Sandbox Code Playgroud)

这假设在您想要渲染喜欢的主视图中,有一个元素,id=likes其中可能如下所示:

<div id="likes">
  <%= render "likes", :likes => @likes %>
</div>
Run Code Online (Sandbox Code Playgroud)

并且还有_likes.html.erb一部分呈现出喜欢的东西

<% likes.each do |like| %>
  <div>
    <%= like.name %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

有了这个,我想我几乎涵盖了它.