【发布时间】:2011-02-11 22:11:40
【问题描述】:
当我尝试在我的用户模型中覆盖 to_param 以使用电子邮件地址作为 ID 时,我的路由出现错误。当它试图匹配路由时,它似乎试图匹配 id 的整个对象。谁能帮我弄清楚我错过了什么?
这是错误:
No route matches {:controller=>"users", :action=>"show", :id=>#<User id: 1, email: ....>}
这是我设置代码的方式。
models/user.rb:
attr_accessible :email
def to_param
email
end
控制器/users_controller.rb:
before_filter :get_user, :only=>[:show,:update,:edit,:destroy]
...
def get_user
@user = User.find_by_email params[:id]
end
config/routes.rb
resources :users
这是 rake 路由的输出:
user GET /users(.:format) {:controller=>"users", :action=>"index"}
POST /users(.:format) {:controller=>"users", :action=>"create"}
new_user GET /users/new(.:format) {:controller=>"users", :action=>"new"}
edit_user GET /users/:id/edit(.:format) {:controller=>"users", :action=>"edit"}
user GET /users/:id(.:format) {:controller=>"users", :action=>"show"}
PUT /users/:id(.:format) {:controller=>"users", :action=>"update"}
DELETE /users/:id(.:format) {:controller=>"users", :action=>"destroy"}
【问题讨论】:
-
请显示链接,这会导致此错误。您所有的代码都是正确的,因此您的链接中存在错误
-
问题在于显示、编辑、更新和销毁路径。所以要么尝试导航到浏览器中的路径(/users/test@test.com,要么在视图中调用link_to,如, or
标签: ruby-on-rails ruby-on-rails-3 routing