Mr.Movies Tamil
Mr.Movies Tamil

Reputation: 47

Wrong arguments zero or one error in rails

I have passed an argument to the controller action. But when loading the page it shows wrong arguments error. And also I need to configure my routes so that it will become users/id/requests instead of user/requests. Because of that I need to pass an user argument.

 <% if signed_in? %>
   <li><%= link_to "Requests", requestuser_path(current_user) %></li>

usercontroller:

 def requestuser(user)
   @title = "Requests"
   @users = user.followed_users.paginate(page: params[:page])
 end

routes.rb

  resources :users do 
    member do
      get :following, :followers
    end
  end

  resources :sessions, only: [:new, :create, :destroy]
  resources :requests, only: [:create]

 match '/request', to: 'users#requestuser', via: [:get, :post], as: :requestuser

Upvotes: 0

Views: 68

Answers (1)

Steve Redka
Steve Redka

Reputation: 218

But when loading the page it shows wrong arguments error.

https://guides.rubyonrails.org/action_controller_overview.html#parameters

You aren't supposed to pass any arguments to Controller methods. In this case you should get user through params:

# users_controller.rb
def show
  @user = User.find(params[:id])
  @title = "Requests"
  @users = @user.followed_users.paginate(page: params[:page])
end

And also I need to configure my routes so that it will become users/id/requests instead of user/requests.

https://guides.rubyonrails.org/routing.html#adding-member-routes

# routes.rb
resources :users do 
  member do
    get :following, :followers, :requests
  end
end
# users_controller.rb
def requests
  @user = User.find(params[:id])
  # whatever requests are
  # @user.requests
end

This is what link should look like in view:

<%= link_to "Requests", user_requests_path(current_user) %>

Upvotes: 1

Related Questions