2016-12-07 54 views
0

我得到相關的鏈接下面的錯誤接受我的意見 下降& - 這是一個路由的問題,但我不知道該如何去做。可以 一個好心勸我如何糾正這種問題與控制器路由與行動 - 導軌5

錯誤信息

No route matches {:action=>"accept", :controller=>"friendships", :id=>"emma"} 

No route matches {:action=>"decline", :controller=>"friendships", :id=>"emma"} 

的意見/用戶/ _friends.html.erb

<% @user.requested_friends.each do |requester| %> 
    <tr> 
    <td><%= link_to(image_tag("img-profile-image-default.png"), requester) %></td> 
    <td><%= link_to requester.firstname, requester %></td> 
    <td> 
     <%= link_to "Accept", 
        { controller: "friendships", 
        action: "accept", 
        id: requester.firstname } %> 
     <%= link_to "Decline", 
        { controller: "friendships", 
        action: "decline", 
        id: requester.firstname }, 
        confirm: "Really decline friendship with #{requester.firstname}?" %> 
    </td> 
    </tr> 
<% end %> 

friendships_controller。 rb

class FriendshipsController < ApplicationController 
    before_filter :setup_friends 

    def create 
    Friendship.request(@user, @friend) 
    flash[:notice] = "Friend request sent." 
    redirect_to :back 
    end 

    def accept 
    if @user.requested_friends.include?(@friend) 
     Friendship.accept(@user, @friend) 
     flash[:notice] = "Friendship with #{@friend.firstname} accepted!" 
    else 
     flash[:notice] = "No friendship request from #{@friend.firstname}." 
    end 
    redirect_to :back 
    end 

    def decline 
    if @user.requested_friends.include?(@friend) 
     Friendship.breakup(@user, @friend) 
     flash[:notice] = "Friendship with #{@friend.firstname} declined" 
    else 
     flash[:notice] = "No friendship request from #{@friend.firstname}." 
    end 
    redirect_to :back 
    end 

    def delete 
    if @user.friends.include?(@friend) 
     Friendship.breakup(@user, @friend) 
     flash[:notice] = "Friendship with #{@friend.firstname} deleted!" 
    else 
     flash[:notice] = "You aren't friends with #{@friend.firstname}" 
    end 
    redirect_to :back 
    end 

    private 
    def setup_friends 
    @user = User.find(current_user.id) 
    @friend = User.find_by_email(params[:id]) 
    end 
end 

routes文件

Rails.application.routes.draw do 
    resources :friendships, only: [:create, :update, :destroy] 
end 


      friendships POST /friendships(.:format)   friendships#create 
       friendship PATCH /friendships/:id(.:format)  friendships#update 
         PUT /friendships/:id(.:format)  friendships#update 
         DELETE /friendships/:id(.:format)  friendships#destroy 

回答

0

因爲你不具備接受或拒絕任何途徑。只有創建,更新,銷燬,正如我所看到的。你在友誼控制器中這樣做,所以在我看來,最好將友誼標識作爲主要參數。 你能做到這樣

resources :friendships, only: [:create, :update, :destroy] do 
member do 
    post :accept 
    post :decline 
end 
end 

這將創建你的路線和路徑傭工像

accept_friendship_path(id: friendship.id) 
decline_friendship_path(id: friendship.id) 

或者你可以使用

accept_friendship_path(friendship) 

,您仍然可以發送朋友id爲PARAM加入它以這樣的方式進行鏈接

link_to "Accept", accept_friendship_path(friendship, friend_id: requester.id)