2012-12-12 164 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..."