【问题标题】:edit link for "admins" in devise rails在设计导轨中编辑“管理员”的链接
【发布时间】:2014-01-21 20:58:44
【问题描述】:

我有一个 rails 应用程序,它使用 devise 进行注册并 rolify 用于角色。我想要一个索引页面,其中包含管理员可以访问的每个用户的编辑链接。此编辑页面也应该无需使用密码即可工作。现在edit_user_path进入当前用户的编辑页面,这不是我想要的。

实施这种网站的最佳方式是什么?我已经阅读了一些关于此的帖子,但似乎没有一个能满足我的需求。

请指点我正确的方向!

已编辑 我正在尝试这样做,仍然遇到“当前密码不能为空” 来自 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 文件中,我有这一行来呈现编辑页面。我可以显示编辑页面,但输入信息然后点击更新只会将我带到 /users 并出现错误“当前密码不能为空”

get 'pressroom/accounts/:id/edit' => 'users#edit', :as => :admin_edit_user

【问题讨论】:

    标签: ruby-on-rails ruby devise rolify


    【解决方案1】:

    Devise 不附带任何类型的管理界面。如果您是唯一的管理员并且不介意有点粗鲁 - 总有控制台和/或脚手架。您可以创建一个继承自 ApplicationController 的 UserController 并执行基本视图,在同一控制器中编辑方法。通过在 User Views 文件夹中放置适当的 new.html.erb、edit.html.erb 等文件,添加/编辑/删除用户的工作方式应该与任何其他 CRUD 没有什么不同,因为 Devise 的用户是另一个模型。在用户上使用脚手架,您可以获得所需的内容。

    还有很多优秀的 gem 可以让设置管理界面变得轻而易举:https://github.com/gregbell/active_admin Active Admin、https://github.com/sferik/rails_admin Rails Admin,我相信还有更多。

    【讨论】:

    • 你能扩展一下粗略的方法吗?我正在做的项目已经有一个简单的管理界面,但我只想实现它。
    • 通过在用户视图文件夹中放置适当的 new.html.erb、edit.html.erb 等文件,添加/编辑/删除用户应该与任何其他 CRUD 一样工作,因为 Devise 的用户是像任何其他模型一样。在用户上使用脚手架,您可以获得您想要的。参考stackoverflow.com/questions/5721276/…
    • "scaffold on the user" 再解释一下。
    【解决方案2】:

    你可以看看这个 RailsCast。请记住,某些方面可能已经过时 如果您想从头开始构建,一般原则保持不变

    http://railscasts.com/episodes/19-where-administration-goes

    【讨论】:

      【解决方案3】:

      看起来我通过添加:

      <div class="panel-body">
      <% @user = User.find(params[:id]) %>
      
          <%= form_for(@user) do |f| %>
      

      到我的 _form.html.erb 文件的顶部

      感谢大家的帮助!

      【讨论】:

        【解决方案4】:

        如果您唯一需要的是让管理员编辑现有用户,您可以在单独的 UsersController 中进行编辑、显示和更新操作(并保留新的操作和创建操作以供设计)。这样你就可以将@user = User.find(params[:id] 逻辑从你的表单中移出,进入控制器,正如@Saurabh Lodha 提到的那样。

        我只是认为答案中缺少一件事:确保还编辑您的 routes.rb。使用路径前缀,这样您的路由就不会混淆,就像这样:
        devise_for :users, :path_prefix => 'my' resources :users

        这意味着当您对 current_user 调用 edit 时,它将转到 my/users/edit,当您从管理面板的用户列表中对任何选定用户调用 edit 时,它将转到 users/user_id /编辑。

        我希望能更清楚一点!祝你好运! :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-09
          • 2020-02-15
          相关资源
          最近更新 更多