2013-09-23 30 views
1

我使用Rails Gem acts_as_follower設置了跟蹤系統,並且遇到了問題肯定如何解決。Rails gem acts_as_follower創建/銷燬錯誤:無法找到id =「用戶名」的成員(用戶)

當我去遵循例如用「testuser1」的用戶名的用戶我得到這個錯誤:

Couldn't find Member with id=testuser1 

app/controllers/follows_controller.rb:6:in `create' 

Parameters: 

{"_method"=>"post", 
"authenticity_token"=>"FnqLCCQYcFGMerOB56/G6dlPvzpPhPDFbxCXaiDBOUU=", 
"member_id"=>"testuser1"} 

這裏是我的控制器:

class FollowsController < ApplicationController 

before_filter :authenticate_member! 

def create 
    @member = Member.find(params[:member_id]) 
    current_member.follow(@member) 
end 

def destroy 
    @member = Member.find(params[:member_id]) 
    current_member.stop_following(@member) 
end 

end 

創建窗體如下:

<%= link_to("Follow", member_follows_path(member.to_param), :method => :post, :class => "btn") %> 

<%= link_to("Following", member_follow_path(member.to_param, current_member.get_follow(member).id), :method => :delete, :class => "btn btn-follow") %> 

這該是多麼我定義我的to_param因爲這是你如何得到一個會員/用戶的頁面:

def to_param 
    user_name 
end 

任何人在那裏知道我可以去修復呢?謝謝。

回答

0

刪除to_param。當您使用URL幫助程序(例如member_follows_path)時,您需要傳遞ID或從ERB的角度來看對象本身(在ERB呈現時它會解析爲ID)

或者,在您的導軌控制器,將find更改爲find_by_user_name之類的內容,或者該字段應該是的內容,然後該行應該可以工作。請注意,這將會變慢,特別是如果你有一個沒有正確的索引/分區的大型數據庫。

+0

謝謝。我用第一種方法,它的工作原理。我有一個關於Ajax的小問題。我添加了:remote => true按鈕並創建相應的create/destroy .js文件:'$(「#following_member」)。html(「<%= escape_javascript(render:partial =>」following/follow_member「,: locals => {:member => @member})%>「);'爲什麼不在沒有手動刷新的情況下更改按鈕? – iamdhunt

+0

我想補充一句:'respond_to do | format | \t format.html {redirect_to的@member} \t format.js \t end'將使叫我create.js,但它不工作 – iamdhunt

+0

@iamdhunt你可以爲我確認您的瀏覽器確實接收的JS代碼斑點(你在上面指定的代碼),並且它被正確渲染和所有這些?如果您使用的是Chrome瀏覽器,則可以使用網絡標籤查看請求。如果是......不確定;請求是作爲字符串而不是分析的代碼返回的? –

相關問題