2011-01-30 11 views
0

RoRのウェブサイト内に友人関係を設定しています。そのモデルはuser_id、friend_id、pending(boolean)です。私は大部分の友人関係についてRailsCastをたどりましたが、それにもいくつか変更を加えました。私はこれまで持っていることは、ユーザーのページに移動するときに要求友情をクリックすると、コードが使用していることです:ruby​​ on railsアクションと一致するルートがありません:delete

user_friendships_path(current_user, :friend_id => @user), :method => :post 

これは友情コントローラで作成メソッドを呼び出します。それは自動的にpendingをtrueに設定します。私が今したいのは、それを受け入れるためのリンクを持つことです。これは、保留中のものをfalseにするだけです。だから私はそれだけでfalseにそのブール値を設定する必要があるため、私は実際に編集ページに行きたくない

(<%= link_to "Accept", user_friendship_path(:user_id => current_user.id, :friend_id => friendship.user.id, :pending => 'false'), :method => :put %>) 

のようにそれを設定しようとしていますので、私は直接更新を呼びたいです。

No route matches {:action=>"destroy", :controller=>"friendships", :user_id=>1, :friend_id=>2, :pending=>"false"} 

私は理由を理解していない:私はこのページを実行したときしかし、私はエラーを取得します。私は破壊を呼び出すのではない(それは:method =>:delete)。実際にはFriendshipコントローラ内にdestroyメソッドがある。

リソースが同じように設定されています

resources :users do 
    resources :friendships 
end 

そして「すくいルート」を実行しているからのパスは次のとおりです。

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

任意の助けいただければ幸いです。詳細が必要な場合はお知らせください。

ありがとうございました。

+0

link_to "Accept"、user_friendship_path(:user_id => current_user.id、:friend_id => friendship.user.id)、:method =>:put%>)を試してみてください。実際には、保留中のパラメータを送信する必要はありません。セキュリティ違反のようなものです。 – apneadiving

答えて

2

すくい経路に従って存在するパスを使用している

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

方法が置かれているが、あなたが供給されていない「:IDを」。

あなたがやろうとしているかに応じて2つのソリューションがあります。

  1. 変更が取得する方法 - 追加新しいアクション
  2. にあなたを指します: - その意志をIDあなたのURLビルダーへ更新アクションを指示してください

コードは2番目に向かって傾いていますが、私は新しい友情を作りたいと思っていれば最初の方が良いと思います。

+0

それはそれでした!うわあ。知っている。はい、明らかに私は特定のIDを更新する必要があります。ありがとうございました! – user596142

0

私は、URLヘルパーを破壊するアクションへのマッピングである理由としてバッフル付きです。 user_friendship_pathを期待paramsは:user_id:id、ない:friend_id:しかし、単純な問題があります。

関連する問題