0

登録にdeviseを使用し、役割にrolifyを使用するレールアプリがあります。管理者がアクセスできる各ユーザーの編集リンクを含むインデックス ページが必要です。この編集ページも、パスワードを使用しなくても機能するはずです。現在、edit_user_path は現在のユーザーの編集ページに移動しますが、これは私が望むものではありません。

この種の状況を実装する最良の方法は何ですか? 私はこれについてここでいくつかの投稿を読みましたが、私が望むものを私に与えるものはないようです.

正しい方向に向けてください!

編集 済みこのようにしようとしていますが、まだ「現在のパスワードを空白にすることはできません」というエラーが発生します

    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
4

4 に答える 4

1

このRailsCastをチェックアウトできます。一部の側面が時代遅れになっている可能性があることを覚えておいてください。ゼロから構築する場合でも、一般的な原則は変わりません。

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

于 2014-01-21T23:12:08.377 に答える
0

管理者が既存のユーザーを編集することだけが必要な場合は、個別の UsersController で編集、表示、および更新アクションを実行できます (また、新規および作成アクションは工夫次第です)。@user = User.find(params[:id]@Saurabh Lodhaが述べたように、そうすれば、そのロジックをフォームからコントローラーに移動できます。

ただし、回答に1つ欠けていると思いました.routes.rbも編集してください。次のように、ルーティングが混乱しないようにパスプレフィックスを使用します。
devise_for :users, :path_prefix => 'my' resources :users

つまり、current_user で edit を呼び出すと、my/users/edit に移動し、管理パネルのユーザー リストから選択した任意のユーザーで edit を呼び出すと、users/user_id/edit に移動します。

それがもう少し明確になったことを願っています!幸運を!:)

于 2014-03-06T11:35:57.097 に答える
0

追加することで機能するようになりました:

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

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

_form.html.erb ファイルの先頭に

みんな助けてくれてありがとう!

于 2014-01-22T22:40:26.310 に答える