我想创建一个用于编辑用户个人资料的rails路径。
我不想使用/ users /:id / edit,而是想拥有像/ edit_profile这样的网址
是否可以创建一个动态路由,将/ edit_profile转换为/ users / {user's id} / edit,或者我应该在控制器中做什么?
答案 0 :(得分:4)
您可能希望为此任务创建单独的控制器,但您也可以继续使用users_controller
并检查是否设置了params[:id]
:
def edit
if params[:id]
@user = User.find(params[:id])
else
@user = current_user
end
end
但是您应该注意/users
通常路由到index
操作,而不是show
,如果您仍然有map.resources :users
路由。但你可以设置一个不同的单一路径:
map.resources :users
map.resource :profile, :controller => "users"
这种方式/users
会列出所有用户,/users/:id
会显示任何用户,/profile
会显示当前登录用户页面的show
。要编辑自己的个人资料,请拨打“/ profile / edit”。
答案 1 :(得分:3)
由于路由和控制器有两个不同的用途,因此您需要两者。
对于控制器,假设您在会话中存储用户ID,您可以让您的编辑方法执行以下操作:
def edit
@user = User.find(session[:user_id])
end
然后有一条看起来像这样的路线:
map.edit_profile "edit_profile", :controller => "users", :action => "edit"
此路线会为您提供名为edit_profile_path
答案 2 :(得分:0)
Tomas Markauskas的回答可行,但这里是Rails指南中你的问题的答案:
get 'edit_profile', to: 'users#edit'
因此,当有人访问www.yoursite.com/edit_profile时,它将路由到www.yoursite.com/users/edit。
然后,在您的控制器中,您可以使用
访问该用户@user = User.find(session[:current_user_id])
假设您在有人登录时设置了该会话变量。另外,请不要忘记检查他们是否已登录。如果您使用资源路由(Rails默认),这将有效。
答案 3 :(得分:0)
将路线设为
get '/users/:id/edit', to: 'users#edit', as: 'edit_profile'
正如此链接部分'困难':
中所述http://augustl.com/blog/2009/styling_rails_urls/
网址将是
/users/edit_profile
由于ID不再在URL中,我们必须稍微更改一下代码。
class User < ActiveRecord::Base
before_create :create_slug
def to_param
slug
end
def create_slug
self.slug = self.title.parameterize
end
end
创建用户时,标题的URL友好版本存储在数据库的slug列中。
为了更好地理解,请阅读以下链接
答案 4 :(得分:0)
def set_roots
if current_user
redirect_to dashboard_home_index_path
else
redirect_to home_index_path
end
端
routes.rb文件中的root:to =&gt; '家#set_roots'
匹配“/ find_roots”=&gt; “家#set_roots”