目前,用户可以通过多种途径访问他们的“个人资料”。
如何才能通过localhost:3000 / users / current_user
获取他们的“个人资料”答案 0 :(得分:1)
关于你的问题的“什么”的一个建议:而不是理想的网址是localhost:3000 / users / current_user我建议 localhost:3000 / user 或更具描述性的内容,例如 localhost:3000 / profile 或 localhost:3000 / account 。
你能在routes.rb中加入这些条目吗?即使Authlogic等向您的应用添加路由,他们也应该在routes.rb中执行此操作。如果您有条目:
map.resource :users
然后就是/ users / 123路由的来源。我同意Matchu,即使你不使用/ users / 123,你也应该保留它并将其他请求发送给它。
额外的想法 如果你不想进入重定向中保留模型验证错误的(有点复杂,而不是很漂亮)业务,这是另一种方式。我假设您已经拥有map.resource:users,因此您在UsersController上有7个默认操作(索引,新建,创建,显示,编辑,更新,销毁)。
在您的routes.rb中:
map.profile 'profile', :controller => 'users', :action => 'show'
map.edit_profile 'profile/edit', :controller => 'users', :action => 'edit', :conditions => { :method => :get }
map.update_profile 'profile/edit', :controller => 'users', :action => 'update', :conditions => { :method => :put }
您需要稍微更新一下form_for标记:
<% form_for @user, :url => update_profile_path do |f| %> ...
现在,假设你开始使用/ profile,然后点击一个编辑链接,带你到/ profile / edit(应该显示表单),如果你填写表单使其验证失败,那么你应该重新开始/ profile /编辑f.error_messages输出中的正确错误。
您的编辑控制器代码应保持不变,您的更新代码应为:
def update
@user = current_user || User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully updated user."
redirect_to @user
else
render :action => 'edit'
end
end
渲染(而不是重定向)保留@user模型的状态(包括错误),然后再次渲染编辑模板。由于您将其定向到update_profile_path,因此用户查看的网址仍为/ profile / edit。
答案 1 :(得分:0)
嗯,首先,删除您/users/current
某个地方必须拥有的routes.rb
路线。 (虽然我更喜欢/users/current
到/users/current_users
,因为后者相当多余。)
对于/users/123
,您可以在控制器中检查当前用户的ID是否与123
或其他任何内容匹配,如果是,则重定向。
但我真的更喜欢相反的效果。将/users/current
推送到/users/123
在我的大脑中更有意义,因为它可以保持所有用户的路线一致,同时仍然允许您缓存到/users/current
的链接。