编辑和更新用户信息.RoR



我使用design进行用户管理,因此它允许用户使用默认的电子邮件和密码字段进行注册。

我在用户模型中添加了新的字段/列,比如用户名、名称和公司。

因此,我有一个个人资料视图,比如说路由"/users/1"和一个link_to助手,可以让我编辑和更新我的用户信息。

默认情况下,我只能使用users/edit route来编辑我的用户信息。我如何在我的个人资料视图中管理一个新的或单独的编辑和更新选项,使用不同的路线,比如"/users/1/edit"。

在此之前,我读了一些帖子,但对我没有帮助。如果有人能概述我应该做的事情。感谢阅读:(

编辑:

路由文件

root 'public#index'
devise_for :users
resources :users do
put 'users/:id/edit', to: 'users#edit'
end

用户控制器

class UsersController < ApplicationController

before_action :authenticate_user!
after_action :verify_authorized
before_action :set_user, only: %i[ show edit update ]
def index
@users = User.all
authorize User
end
def show
authorize @user
end
def edit
if current_user == @user
@user.update()
end
end
def update
authorize @user
if @user.update(secure_params)
redirect_to users_path, :notice => "User updated."
else
render 'edit'
end
end
private
def secure_params
params.require(:user).permit(:designation, :company,      
:username)
end
def set_user
@user = User.find(params[:id])
end
end

在我看来,去编辑:

<% if current_user.id == @user.id %>
<%= link_to 'Edit My profile', edit_user_path(@user), method: :edit, 
class:"btn btn-primary" %>
<% end %>

如果您真的想要一个路由user/:id/edit,而不使用Devise默认的users/edit路由(编辑当前登录的用户(。您可以执行以下操作:

假设您有一个用户控制器(如果没有,请创建一个(,并向其中添加一个edit操作,该操作将处理编辑逻辑:

class UsersController < ApplicationController
# other code
def edit
user = User.find_by(id: params[:id]) # this id will be passed through the route

# Now here you need some authorization logic to prevent users from updating others.
# If you use CanCanCan, Pundit or any other authorization gem then write
# this logic there
if current_user == user
user.update() # do your update logic here with params you have
# render some json or whatever you want
else
# render some error messages in format you are using
end

end
end

这是控制器逻辑,现在在您的routes.rb文件中,您需要注册此路由:

put 'user/:id/edit', to: 'users#edit'

这将编辑具有在:id中指定的ID的用户。

再次注意:这不是我会采取的方法,我宁愿只使用users/edit路由并更新当前登录的用户,但您想要一个这样的例子,所以您将

最新更新