0

私はこの答えをどこでもオンラインで見つけようとしてきましたが、これは他の誰かを助けるかもしれません.

socialization と呼ばれる ruby​​ gem をインストールしました。これは正常に機能します。これにより、ユーザーは何でもフォロー/フォロー解除/いいね/いいね/いいね/メンションすることができます。

私が抱えている問題は、2 つのリンク (フォローするものとフォローしないもの) を作成したことです。リンクが機能し、クリックするとデータベースからレコードが完全に追加および削除されますが、更新を押すと、リンクをクリックしなくてもアクションが発生します。 .

できるだけ明確にするために、問題は次のとおりです。

ユーザーが現在フォローされていて、ページを更新すると、(ボタンをクリックせずに) フォローが解除されます。その後、フォローを解除してページを更新すると、再びフォローされます (ボタンをクリックせずに)。

コードは次のとおりです。

<% if current_user.follows?(@user)%>
   <%= link_to "Unfollow", user_path, :action => current_user.unfollow!(@user), :class => "btn btn-primary"%>
<% else %>
   <%= link_to "Follow", user_path, :action => current_user.follow!(@user), :class => "btn btn-primary"%>
<% end %>

リンクをキャッシュしているブラウザ、または生成されたリンクが

<a href="/users/1" action="#&lt;Follow:0x103ce81d8&gt;" class="btn btn-primary" rel="nofollow">Follow</a>

アクションはどちらの方法でも実行されます

編集:

Rake routes: 

  users_index GET    /users/index(.:format)            users#index
         dashboard_index GET    /dashboard/index(.:format)        dashboard#index
    dashboard_my_rentals GET    /dashboard/my_rentals(.:format)   dashboard#my_rentals
    dashboard_my_credits GET    /dashboard/my_credits(.:format)   dashboard#my_credits
    dashboard_my_invites GET    /dashboard/my_invites(.:format)   dashboard#my_invites
      dashboard_my_faves GET    /dashboard/my_faves(.:format)     dashboard#my_faves
  dashboard_edit_profile GET    /dashboard/edit_profile(.:format) dashboard#edit_profile
           tsmhome_index GET    /tsmhome/index(.:format)          tsmhome#index
        new_user_session GET    /users/sign_in(.:format)          devise/sessions#new
            user_session POST   /users/sign_in(.:format)          devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)         devise/sessions#destroy
           user_password POST   /users/password(.:format)         devise/passwords#create
       new_user_password GET    /users/password/new(.:format)     devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)    devise/passwords#edit
                         PUT    /users/password(.:format)         devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)           devise/registrations#cancel
       user_registration POST   /users(.:format)                  devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)          devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)             devise/registrations#edit
                         PUT    /users(.:format)                  devise/registrations#update
                         DELETE /users(.:format)                  devise/registrations#destroy
              home_index GET    /home/index(.:format)             home#index
                   users GET    /users(.:format)                  users#index
                         POST   /users(.:format)                  users#create
                new_user GET    /users/new(.:format)              users#new
               edit_user GET    /users/:id/edit(.:format)         users#edit
                    user GET    /users/:id(.:format)              users#show
                         PUT    /users/:id(.:format)              users#update
                         DELETE /users/:id(.:format)              users#destroy
                                /show/:id(.:format)               user#show
                    root        /                                 home#index



user controller

  def index
@users = User.all

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :json => @users }
end


end
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :json => @user }
    end
  end
4

1 に答える 1

0

あなたのリンクは の時点でactionあると見なされます。2 番目のパラメーターとして指定する必要があるためです。ドキュメントを確認してください。コントローラーの特定のアクションへのパスを取得するには、 を実行します。をリストし、最後に追加して同じものを使用します。attributelink_to tagactionrake routesroutes_pathlink_to tag

以下のようになると思います。

<% if current_user.follows?(@user)%>
   <%= link_to "Unfollow", unfollow_user_path(:user => @user), :class => "btn btn-primary"%>
<% else %>
   <%= link_to "Follow", follow_user_path(:user => @user), :class => "btn btn-primary"%>
<% end %>

コントローラーで:

def follow
  #do something like
  user = User.find(params[:user])
  current_user.follow!(user)
  flash[:success] = "Follwed user #{user.name}"
  redirect_to :back
end

def unfollow
  #do something like
  user = User.find(params[:user])
  current_user.unfollow!(user)
  flash[:success] = "Unfollwed user #{user.name}"
  redirect_to :back
end

ルート内:

resources :users do
  collection do
    get 'follow'
    get 'unfollow'
  end
end
于 2013-02-26T15:52:30.217 に答える