ruby-on-rails – Rails 3.0:在模型中覆盖to_param时出现路径错
发布时间:2020-12-17 04:15:15 所属栏目:百科 来源:网络整理
导读:当我尝试在我的用户模型中覆盖to_param以使用电子邮件地址作为id时,我的路由出错了.它似乎试图在尝试匹配路由时匹配id的整个对象.任何人都可以帮我弄清楚我错过了什么? 这是错误: No route matches {:controller="users",:action="show",:id=#User id: 1,e
当我尝试在我的用户模型中覆盖to_param以使用电子邮件地址作为id时,我的路由出错了.它似乎试图在尝试匹配路由时匹配id的整个对象.任何人都可以帮我弄清楚我错过了什么?
这是错误: No route matches {:controller=>"users",:action=>"show",:id=>#<User id: 1,email: ....>} 这是我如何设置代码. 车型/ 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 配置/ 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"} 解决方法
问题是电子邮件添加了’.’ (点)在网址中,这会混淆rails,因为它试图找到“com”格式(如果电子邮件以.com结尾)
我已将此代码添加到我的某个应用程序(我有人而不是用户)并且它正常工作,所以诀窍是用其他东西替换点.我选择将其替换为“@”作为其他符号,例如 – 或在电子邮件地址中有效. 档案人.rb def to_param email.sub ".","@" end def self.param_to_email(param) segments = param.split '@' host = segments[1..-1].join('.') segments[0] + '@' + host end 文件people_controller.rb def get_person email = Person.param_to_email params[:id] @person = Person.find_by_email email end 关于这在http://jroller.com/obie/entry/seo_optimization_of_urls_in中是如何工作的还有一些提示. 谢谢你的问题,我刚开始使用rails,所以这真的帮助我理解它是如何工作的:). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |