2011-10-23 88 views
2

rails newbie herem,我期待了解一些關於jquery的知識,所以我想我會嘗試在使用AJAX的部分視圖之間切換。Rails 3:jquery更改部分

現在在我的用戶的短跑我有一個鏈接到他們的'喜歡'頁面,它需要一個完整的重新加載,以查看'喜歡'頁面,我會如何改變這與refresh_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> 

UsersController

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

回答

8

我的理解是,你想通過點擊一個鏈接,通過使用AJAX,在重新加載likes您用戶儀表板。

首先要做的是重寫的鏈接,並添加:remote => true這樣的:

<%= link_to "Likes", likes_user_path(@user), :remote => true %> 

然後,在你的控制器,請確保您在頂部有一個respond_to :html, :js(有當然也可以是其他選項但:js已在他們中間)

之後,你可以做一個名爲在你的控制器,用來加載喜歡,它看起來像你likes功能,只有你沒有在最後做render ,但respond_with @likes。通過在respond_to篩選器中設置:js,Rails將在應有時自動執行相應操作。

接着,建立相應的視圖稱爲likes.js.erb(我不能完全肯定是否會CoffeeScript的工作,開箱即用在這種情況下),其中你把類似

$('#likes').html('<%= escape_javascript(render "likes", :likes => @likes) %>'); 

這是假設在主鑑於要在其中呈現的喜歡,還有與id=likes元素可能是這樣的:

<div id="likes"> 
    <%= render "likes", :likes => @likes %> 
</div> 

,並還有一個_likes.html.erb部分這使得喜歡

<% likes.each do |like| %> 
    <div> 
    <%= like.name %> 
    </div> 
<% end %> 

而這個我覺得我幾乎覆蓋了它。

+0

嗨,感謝您的幫助。也許我仍然對rails有所瞭解以瞭解這一點,或者也許我只是jquery,我不理解。 respond_to:html,:js會進入哪個控制器和方法? respond_with @Likes如何工作?我根本不遵循這一點。我需要喜歡的頁面在div id =「content」內渲染。仍然困惑,因爲這是如何工作的。對不起,如果我是新的。 –

+0

具體來說,在你的情況下,控制器是Users,在你的問題中有一個名爲'likes'的動作,它應該返回喜歡的東西(該功能非常好,儘管我會重構喜歡並將它們放入'User'模型,但那是另一回事;無論如何,'likes'操作必須以'respond_with'結束,而不是'render',你用ajax調用它,然後Rails會在你的''' #likes' div - 檢查'likes.js.erb' - 它取代'#likes'中的html內容) –

+0

非常感謝,這非常有幫助。 –