Pregunta

I wrote a "follow" method in UsersController

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

Pretty simple. And In the view, I have

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

In routes,

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

When I click on the link, it complains: Missing template users/start_following

So, how do I make it just stay on the same page after the action? The view page that I want to stay on is Show view of the user is to be followed. ex: users/{user_id}. Is simply redirecting not a solution? I thought adding redirect_to {somewhere} would get rid of the error, but it didn't.

¿Fue útil?

Solución

I would redirect to the user in question. If you are using the standard resourceful routes then you can just do

redirect_to(@user_to_follow)

As an aside it's generally considered bad practice to have GET requests that make changes - people normally use put/patch/post/delete requests for those. You can fall afoul of browsers pre-fetching links without the user actually clicking on them.

Otros consejos

try:

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

Yes redirect_to solves your problem, I suspect you forgot to add it to both branches of the unless

The code would look like this:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top