RoR Web サイト内でフレンドシップを設定しています。そのモデルは、user_id、friend_id、および保留中 (ブール値) です。ほとんどの場合、RailsCast の友情をたどりましたが、いくつかの変更も加えました。これまでのところ、ユーザーのページに移動すると、[フレンドシップのリクエスト] をクリックでき、コードは次のように使用されます。
user_friendships_path(current_user, :friend_id => @user), :method => :post
これにより、Friendships コントローラーの create メソッドが呼び出されます。pending を自動的に true に設定します。私が今欲しいのは、それを受け入れるためのリンクがあり、保留中が偽になることです。だから私はそれを次のように設定しようとしています
(<%= link_to "Accept", user_friendship_path(:user_id => current_user.id, :friend_id => friendship.user.id, :pending => 'false'), :method => :put %>)
そのブール値をfalseに設定するだけでよいので、実際には編集ページに行きたくないので、更新を直接呼び出したいです。しかし、このページを実行すると、次のエラーが表示されます。
No route matches {:action=>"destroy", :controller=>"friendships", :user_id=>1, :friend_id=>2, :pending=>"false"}
理由がわかりません。私は destroy を呼び出していません (それは :method => :delete を使用します)。実際には、Friendship コントローラー内に destroy メソッドがあります。
リソースは次のように設定されます。
resources :users do
resources :friendships
end
そして、実行中の「rake ルート」からのパスは次のとおりです。
user_friendships GET /users/:user_id/friendships(.:format) {:action=>"index", :controller=>"friendships"}
user_friendships POST /users/:user_id/friendships(.:format) {:action=>"create", :controller=>"friendships"}
new_user_friendship GET /users/:user_id/friendships/new(.:format) {:action=>"new", :controller=>"friendships"}
edit_user_friendship GET /users/:user_id/friendships/:id/edit(.:format) {:action=>"edit", :controller=>"friendships"}
user_friendship GET /users/:user_id/friendships/:id(.:format) {:action=>"show", :controller=>"friendships"}
user_friendship PUT /users/:user_id/friendships/:id(.:format) {:action=>"update", :controller=>"friendships"}
user_friendship DELETE /users/:user_id/friendships/:id(.:format) {:action=>"destroy", :controller=>"friendships"}
どんな助けでも大歓迎です。さらに情報が必要な場合はお知らせください。
ありがとう。