Trying to implement friends with Rails, getting a No Route Matches [GET] error when I try to route to any controller method -


i've been searching answer past few hours , i'm frustrated, i'm new rails feel stupid mistake or did totally wrong. please me fix error. here controller:

class friendshipscontroller < applicationcontroller     before_action :authenticate_user!     before_action :def_user, only: [:create, :accept, :deny, :destroy]      def index         @user = current_user         @friends = @user.friends.paginate :page => params[:page]         @pending_friends = @user.pending_friends.paginate :page => params[:page]     end      def show     end      def create         friendship.request(@user1, @friend)         flash[:success] = "friend request has been sent #{@user2.screenname}."         redirect_to user_path(@friend)     end      def accept         freindship.accept(@user1, @friend)         flash[:success] = "friend request #{@user2.screenname} has been accepted."         redirect_to friends_path     end      def deny         friendship.breakup(@user1, @friend)         flash[:success] = "friend request #{@user2.screenname} has been declined."         redirect_to friends_path     end      def destroy         friendship.breakup(@user1, @friend)         flash[:success] = "#{@user2.screenname} has been removed friends list."         redirect_to friends_path     end      private      def def_user         @user1 = current_user         @friend = user.find(params[:id])     end end 

and model:

class friendship < activerecord::base     belongs_to :user     belongs_to :friend, :class_name => 'user'       def self.request(user, friend)         unless user == friend or friendship.exists?(user, friend)             transaction                 create(:user => user, :friend => friend, :status => 'pending')                 create(:user => friend, :friend => user, :status => 'requested')             end         end     end      def self.accept(user, friend)         transaction             accepted_at = time.now             accept_one_side(user, friend, accepted_at)             accept_one_side(friend, user, accepted_at)         end     end      def self.breakup(user, friend)     transaction       destroy(find_by_user_id_and_friend_id(user, friend))       destroy(find_by_user_id_and_friend_id(friend, user))       end     end      private      def self.accept_one_side(user, friend, accepted_at)         request = find_by_user_id_and_friend_id(user, friend)         request.status = 'accepted'         request.accepted_at = accepted_at         request.save!     end end 

in routes file have

get 'friends/create', to: 'friendships#create', as: 'add_friend' 

the line in views calls this:

<%= link_to "send friend request", add_friend_path(current_user, @user), method: :get, class: "btn btn-default" %> 

i have tried

<%= link_to 'send friend request', {:controller => 'friendships', :action => 'create', :id => @user.id}, :class => "btn btn-default" %> 

sorry noobiness, , thank help.

please consider add in :id route.

get 'friends/create/:id', to: 'friendships#create', as: 'add_friend' 

you trying def_user params[:id], id not present in route.

just thougths:

that code

flash[:success] = "friend request #{@user2.screenname} has been accepted." 

will fail

undefined method `screenname' nil:nilclass 

because it's no @user2 defined.

also pleae note crud implementation assumes use different http methods post, put , delete

so, creating friendship post method suits better get. same deny , destroy actions.

rails provides convenient resource routes http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default

hope helps.


Comments

Popular posts from this blog

javascript - How to get current YouTube IDs via iMacros? -

c# - Maintaining a program folder in program files out of date? -

emulation - Android map show my location didn't work -