为什么params [:id]为零?

时间:2013-05-12 06:46:47

标签: ruby-on-rails twitter-follow

我正在尝试创建关注/取消关注按钮,但我的索引操作中出现错误:

  

找不到没有ID的用户

users_controller.rb:

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

我发现params[:id]nil。我是Rails的新手,我无法理解为什么它是nil

有谁能解释我做错了什么?

1 个答案:

答案 0 :(得分: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

所以在上面只有showeditupdatedestroy路线可以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上阅读更多内容。