2013-05-12 2 views
1

Я пытался создать последующие кнопки/Перестать, но у меня есть ошибки в указательного действия:Почему параметры [: id] равны нулю?

Не удалось найти пользователя без ID

users_controller.rb:

class UsersController < ApplicationController 
    before_filter :authenticate_user! 
    def index 
    @user = User.find(params[:id]) 
    end 
end 

Я узнал, что params[:id] is nil. Я очень новичок в Rails, и я не понимаю, почему это nil.

Может ли кто-нибудь объяснить, что я делаю неправильно?

+0

Вы положили параметр 'id' в свой запрос? – shem

+0

Вы использовали URL-адрес типа/users/put_id_here – av501

ответ

3

При запуске rake routes вы увидите, какие маршруты принять id и которые не делают, пример вывода:

GET  /photos    index 
GET  /photos/new   new 
POST /photos create  create 
GET  /photos/:id   show 
GET  /photos/:id/edit edit 
PUT  /photos/:id   update 
DELETE /photos/:id   destroy 

Так в приведенном выше только show, edit, update и destroy маршруты могут принимать id

Если вы не изменили свои маршруты, index обычно используется для сбора, так:

def index 
    @users = User.all # no id used here, retreiving all users instead 
end 

Конечно, вы можете настроить маршруты, как вам угодно, например:

get "users/this-is-my-special-route/:id", to: "users#index" 

Теперь localhost:3000/users/this-is-my-special-route/12 будет вызывать пользователей index действия. Хотя в этом случае вам лучше создать новый маршрут и соответствующее ему действие, а не изменять этот индекс.

Вы можете узнать больше о routing in Rails here.

+0

Теперь это имеет смысл. Большое спасибо! – Blaze