1

UsersController に「follow」メソッドを書きました

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
end

ものすごく単純。そして、ビューでは、私は持っています

<%= 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}追加するとエラーが解消されると思いましたが、そうではありませんでした。

4

3 に答える 3

3

問題のユーザーにリダイレクトします。標準のリソースフルルートを使用している場合は、次のことができます

redirect_to(@user_to_follow)

余談ですが、一般的に、変更を行う GET リクエストを使用することは悪い習慣と見なされています。通常、これらのリクエストには put/patch/post/delete リクエストを使用します。ユーザーが実際にリンクをクリックせずにリンクをプリフェッチするブラウザーに違反する可能性があります。

于 2012-12-12T11:52:38.613 に答える
3

試す:

redirect_to :back, :notice => "successfully followed someone..."
于 2012-12-12T11:54:03.937 に答える
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
于 2012-12-12T11:52:59.017 に答える