2012-12-12 162 views
1

我在UsersController模板中缺少行動

很簡單寫了「跟隨」的方法。而在視圖中,我有

<%= link_to 'Follow', follow_user_path(@user) %> 

在路線,

resources :users do 
member do 
    get 'follow' => "users#start_following", :as => 'follow' 

當我點擊鏈接,它抱怨:Missing template users/start_following

所以,我怎麼讓它只是停留在行動後的同一頁? 我想繼續觀看的頁面是遵循用戶的顯示視圖。 例如:users/{user_id}。僅僅是重定向而不是解決方案?我認爲添加redirect_to {somewhere}會擺脫錯誤,但它沒有。

回答

3

我會重定向到有問題的用戶。如果您使用的是標準的足智多謀的路線,那麼你可以做

redirect_to(@user_to_follow) 

順便它通常被認爲是不好的做法,有GET請求,使變化 - 人們通常使用put /那些補丁/後/刪除請求。您可以與瀏覽器預取鏈接而無需用戶實際點擊鏈接。

+0

謝謝你爲旁註。我如何使它成爲PUT請求而不是GET? –

+0

改變你的路線文件是一個放,而不是一個得到然後或者添加:方法=>:放到你的link_to(需要rails的東西)或使它成爲一個窗體(button_to可以是一個快捷方式) –

2

redirect_to解決您的問題,我懷疑你忘了將它添加到的unless

兩個分支的代碼是這樣的:

def start_following 
    @user = current_user 
    @user_to_follow = User.find(params[:id]) 
    unless @user_to_follow == @user 
     @follow_link = @user.follow_link.create(:follow_you_id => @user_to_follow.id, :user_id => @user.id) 
     @user.save 
     flash[:start_following] = "You started following" + @user_to_follow.name 
    else 
     flash[:cant_follow] = "You cannot follow yourself" 
    end 
    redirect_to @user_to_follow 
end 
3

嘗試:

redirect_to :back, :notice => "successfully followed someone..."