我有一个rails app,使用devise进行注册并为角色进行rolify。我想有一个索引页面,其中包含管理员可以访问的每个用户的编辑链接。此编辑页面也可以在不使用密码的情况下工作。现在,edit_user_path会转到当前用户的编辑页面,这不是我想要的。
实施此类引用的最佳方式是什么?我已经在这里阅读了一些关于此的帖子,但似乎没有人给我我想要的东西。
请指出我正确的方向!
EDITED 我试图这样做,仍然遇到“当前密码不能为空” 来自Users_controller:
def update
@user = User.find(params[:id])
if params[:user][:password].blank?
params[:user].delete(:password)
params[:user].delete(:password_confirmation)
end
if @user.update_attributes(user_params)
redirect_to users_path, :notice => "User updated."
else
redirect_to users_path, :alert => "Unable to update user."
end
end
在我的观点中,我有一个edit.html.erb文件,该文件呈现以下形式:
<div class="panel-body">
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
<%= devise_error_messages! %>
<div class="form-group">
<%= f.label :email %>
<%= f.email_field :email, class: "form-control", :autofocus => true %>
</div>
<div class="form-group">
<%= f.label :username %>
<%= f.text_field :username, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :firstname %>
<%= f.text_field :firstname, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :lastname %>
<%= f.text_field :lastname, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :city %>
<%= f.text_field :city, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :zip %>
<%= f.text_field :zip, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :state %>
<%= f.text_field :state, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :country %>
<%= f.text_field :country, class: "form-control" %>
</div>
<div class="form-group">
<%= f.submit "Update", class: "btn btn-primary" %>
</div>
<% end %>
</div>
最后在我的routes.rb文件中我有这一行来呈现编辑页面。我可以显示编辑页面但输入信息然后点击更新只是向我/用户发送错误“当前密码不能为空”
get 'pressroom/accounts/:id/edit' => 'users#edit', :as => :admin_edit_user
答案 0 :(得分:1)
Devise没有任何类型的Admin界面。如果您是唯一的管理员并且不介意一点粗暴 - 总有控制台和/或脚手架。您可以创建一个UserController,它继承自ApplicationController并执行基本视图,在同一个控制器中编辑方法。通过在用户视图文件夹中放置相应的new.html.erb,edit.html.erb等文件,添加/编辑/删除用户应该与其他任何CRUD没有区别,因为Devise的用户是另一个类似的模型。在用户身上使用脚手架,你就可以得到你想要的东西。
还有很多好的宝石可以让管理界面变得简单:https://github.com/gregbell/active_admin活动管理员,https://github.com/sferik/rails_admin Rails管理员,我相信还有更多的东西。
答案 1 :(得分:1)
你可以查看一下这个RailsCast。请记住,某些方面可能已过时 如果你想从头开始构建它,一般原则保持不变
答案 2 :(得分:0)
看起来我通过添加:
来实现它<div class="panel-body">
<% @user = User.find(params[:id]) %>
<%= form_for(@user) do |f| %>
到我的_form.html.erb文件的顶部
感谢大家的帮助!
答案 3 :(得分:0)
如果您只需要管理员编辑现有用户,您可以在单独的UsersController中进行编辑,显示和更新操作(并保留新操作并创建操作以进行设计)。这样你可以将@user = User.find(params[:id]
逻辑移出你的形式,进入控制器,正如@Saurabh Lodha所提到的那样。
我只是觉得答案中缺少一件事:确保也编辑你的routes.rb 。使用路径前缀,这样您的路由就不会混淆,有点像这样:
devise_for :users, :path_prefix => 'my'
resources :users
这意味着当您在current_user上调用edit时,它将转到我的/ users / edit,当您在管理面板中的用户列表中调用任何选定用户的编辑时,它将转到users / user_id /编辑。
我希望更多地澄清一下!祝好运! :)