0

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"}

どんな助けでも大歓迎です。さらに情報が必要な場合はお知らせください。

ありがとう。

4

2 に答える 2

2

レーキ ルートに従って存在するパスは、

user_friendship PUT    /users/:user_id/friendships/:id(.:format)         {:action=>"update", :controller=>"friendships"}

使用しているメソッドは配置されていますが、「:id」が指定されていません。

実行しようとしていることに応じて、2 つの解決策があります。

  1. メソッドを取得するように変更します-これにより、新しいアクションが示されます
  2. :id を URL ビルダーに追加します。これにより、更新アクションが示されます。

あなたのコードは 2 番目に傾いていますが、新しい友情を築きたいのであれば、1 番目の方が良いと思います。

于 2011-01-31T14:20:01.050 に答える
0

URL ヘルパーが破棄アクションにマッピングされている理由がわかりません。user_friendship_pathただし、より単純な問題が:user_idあり:idます:friend_id

于 2011-01-31T04:04:56.533 に答える