簡體   English   中英

在devise rails中編輯“admins”的鏈接

[英]edit link for “admins” in devise rails

我有一個rails應用程序使用設計注冊和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文件中,我有這一行來渲染編輯頁面。 我可以讓編輯頁面顯示但輸入信息然后點擊更新只是向我/用戶發送錯誤“當前密碼不能為空”

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

Devise沒有任何類型的Admin界面。 如果您是唯一的管理員並且不介意一點粗暴 - 總有控制台和/或腳手架。 您可以創建一個UserController,它繼承自ApplicationController並執行基本視圖,在同一個控制器中編輯方法。 通過在用戶視圖文件夾中放置相應的new.html.erb,edit.html.erb等文件,添加/編輯/刪除用戶應該與其他任何CRUD沒有區別,因為Devise的用戶是另一個類似的模型。 在用戶身上使用腳手架,您就可以得到您想要的東西。

還有很多好的寶石可以讓管理界面變得簡單: https//github.com/gregbell/active_admin Active Admin, https//github.com/sferik/rails_admin Rails Admin我確定在那里還有更多的東西。

你可以看看這個RailsCast。 請記住,某些方面可能已經過時如果您想從頭開始構建它,一般原則保持不變

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

看起來我通過添加:

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

    <%= form_for(@user) do |f| %>

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

感謝大家的幫助!

如果您只需要管理員編輯現有用戶,您就可以在單獨的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 / edit。

我希望更多地澄清一下! 祝好運! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM