2011-06-01 56 views
0

我花了幾天(如4)試圖解決這個問題。我遵循Hartl Rails 3教程,並在第12章嘗試將網站從原型轉換爲jQuery。我無法獲得「follow」/「unfollow」按鈕來更新。jQuery/Rails 3按鈕不會改變狀態

我能夠從Safari的Inspect Element Console中發出jQuery命令,但是如果我把最簡單的jQuery命令放到destroy.js.erb或create.js.erb文件中,什麼都不會發生。該日誌表明正在渲染適當的關係/ destry.js.erb(或create.js.erb)文件。

這裏是我有在控制器的代碼:

class RelationshipsController < ApplicationController 
    before_filter :authenticate 

    def create 
@user = User.find(params[:relationship][:followed_id]) 
    current_user.follow!(@user) 
    respond_to do |format| 
    format.html { redirect_to @user } 
    format.js 
    end 
end 
def destroy 
    @user = Relationship.find(params[:id]).followed 
    current_user.unfollow!(@user) 
    respond_to do |format| 
    format.html { redirect_to @user } 
    format.js 
    end 
end 
end 

在使用者/ _follow.html.haml是

- relationship = current_user.relationships.build(:followed_id => @user.id) 
= form_for(relationship, :remote => true) do |f| 
    = f.hidden_field :followed_id 
    .actions= f.submit "Follow" 

在使用者/ _unfollow.html.haml是

- relationship = current_user.relationships.find_by_followed_id(@user) 
- delete = { :method => :delete } 
    = form_for(relationship, :html => delete, :remote => true) do |f| 
    .actions= f.submit "Unfollow" 

用戶/ _follow_form.html.haml是

- unless current_user?(@user) 
    #follow_form 
    - if current_user.following?(@user) 
    = render 'unfollow' 
    - else 
    = render 'follow' 

的關係/ create.js.erb是

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>") 
$("#followers").html('<%= "#{@user.followers.count} followers" %>') 

的關係/ destroy.js.erb是

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>") 
$("#followers").html('<%= "#{@user.followers.count} followers" %>') 

然而,在試圖診斷這一點,我想一個很基本的

$("#title").html("Followed") 

這也不起作用。

回答

1

看起來像你使用jQuery的問題。

jQuery使用CSS樣式的選擇器,而Prototype沒有。所以,要使其工作,只需在選擇器中添加一個「#」符號。取而代之的

$("follow_form").html("something"); 

您應該使用

$("#follow_form").html("something"); 
// Note the # symbol in the selector. 
// Also, remember to end your statements with a semicolon. 

你可以閱讀有關jQuery的ID選擇在這裏:http://api.jquery.com/id-selector/

+0

良好的捕捉,但即使在這種變化後問題仍然存在。任何其他想法?我可以做些什麼來幫助診斷? – humbledaisy 2011-06-01 23:28:17

0

檢查公共文件夾爲Assets文件夾,用的application.js在裏面。不知道我是如何結束的,但是這導致了Ajax查詢被處理兩次。

0

看起來你可能會使用Rails 3.1。如果需要相同的結果,使用本教程中使用的確切寶石版本(包括Rails 3.0而不是3.1)是非常重要的。有關更多建議,請參閱Rails Tutorial Help page上的調試技巧。