2017-01-28 15 views
0

自分のプロジェクトでdeviseを使用しています。私の管理パネルから他のプロフィールを更新したいので、adminの役割を持つユーザーのみがアクセスできます。この動作はデフォルトのdevise私は分離されたコントローラを作成することにしました。ユーザーを通常のレコードとして操作できますが、何らかの理由でユーザーを更新すると、レコードはデータベースに更新されません。ruby​​ on rail recordsが更新されていません

これらはMY ROUTES

devise_for :users, controllers: { registrations: 'users/registrations' } 
    root "users#index" 
    post "users/:id" => "users#show" 
    get "users/:id" => "users#show", as: :user 
    patch "users/:id" => "users#show" 
    resources :receipts 
    resources :notes 

    get "users/edit/:id" => "users#edit", as: :edit_user 

される。これは、MY CONTROLLER

def edit 
    @user = User.find(params[:id]) 
end 

def update 
    user = User.find(params[:id]) 
    user.update(user_update_params) 
    redirect_to user 
end 

private 
    def user_update_params 
     params.require(:user).permit(:username, :names, :last_names, :guardian, :phone, :identification, :role) 
    end 

    def user_params 
     if @user.debts.nil? 
      params.require(:user).permit(:debts) 
     else 
      params.require(:user).permit(:add_debt) 
     end 
    end 

が、これらは私の見解

<% if current_user && current_user.has_role?(:admin) %> 

    <div class="container form-bg"> 
     <div class="row main"> 
      <div class="panel-heading"> 
        <div class="panel-title text-center"> 
         <h1 class="title">Editar usuario</h1> 
         <hr /> 
        </div> 
       </div> 
      <div class="main-login main-center"> 

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

       <div class="form-group"> 
       <%= f.label :username, "Usuario" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span> 
        <%= f.text_field :username, autofocus: true, class: "form-control" %> 
        </div> 
       </div> 
       </div> 

       <div class="form-group"> 
       <%= f.label :names, "Nombres" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span> 
        <%= f.text_field :names, autofocus: true, class: "form-control" %> 
        </div> 
       </div> 
       </div> 


       <div class="form-group"> 
       <%= f.label :last_names, "Apellidos" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span> 
        <%= f.text_field :last_names, autofocus: true, class: "form-control" %> 
        </div> 
       </div> 
       </div> 

       <div class="form-group"> 
       <%= f.label :phone, "Teléfono" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-phone fa" aria-hidden="true"></i></span> 
        <%= f.text_field :phone, autofocus: true, class: "form-control" %> 
        </div> 
       </div> 
       </div> 

       <div class="form-group"> 
       <%= f.label :identification, "Número de identification" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-envelope fa" aria-hidden="true"></i></span> 
        <%= f.text_field :identification, autofocus: true, class: "form-control" %> 
        </div> 
       </div> 
       </div> 


       <div class="form-group"> 
       <%= f.label :guardian, "Guardian legal" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span> 
        <%= f.text_field :guardian, autofocus: true, class: "form-control" %> 
        </div> 
       </div> 
       </div> 

       <div class="form-group "> 
       <label> 
        <%= f.radio_button :role, "student" , :checked => true %> 
        Estudiante 
       </label> 
       <label> 
        <%= f.radio_button :role, "teacher" %> 
        Profesor 
       </label> 
       </div> 



       <div class="form-group"> 
       <%= f.label :password, "Contraseña" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-lock fa" aria-hidden="true"></i></span> 
        <% if @minimum_password_length %> 
         <em>(<%= @minimum_password_length %> characters minimum)</em> 
        <% end %> 
        <%= f.password_field :password, autofocus: true, class: "form-control", autocomplete: "off" %> 
        </div> 
       </div> 
       </div> 


       <div class="form-group"> 
       <%= f.label :password_confirmation, "Confirmar contraseña" ,class: "cols-sm-2 control-label" %><br /> 
       <div class="cols-sm-10"> 
        <div class="input-group"> 
        <span class="input-group-addon"><i class="fa fa-lock fa" aria-hidden="true"></i></span> 
        <%= f.password_field :password_confirmation, autofocus: true, class: "form-control", autocomplete: "off" %> 
        </div> 
       </div> 
       </div> 

       <div class="form-group "> 
       <%= f.submit "Editar", class: "btn btn-primary btn-lg btn-block login-button" %> 
       </div> 

      <% end %> 
      </div> 
     </div> 
     <p class="invisible">asdsadsadsdsadsad</p> 
     </div> 
<% else %> 
    <h1>Acceso exclusivo para administradores</h1> 
<% end %> 

ISされるように、私のスタックトレースを読んだ後、それは確かにしようとしますパッチは、しかし、それは、パラメータは許可されていない、それは非常に奇妙なので、私はすでにそれらを許可した私のuser_update_paramsメソッド。

がコントローラに意図された通りにしてもリダイレクトする場合は、この私のトレースに

Started PATCH "https://stackoverflow.com/users/12" for ::1 at 2017-01-28 13:20:53 -0500 
Processing by UsersController#show as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"IdJKYYFVh8ZJJm/RPRJd7blfQw84Ct38KjE5tZ6fTuHFK8TG04MxUu2OtQv6wfLvFJll0EYYZa+ooxP19RqOAQ==", "user"=>{"username"=>"jimena", "names"=>"Jimena44", "last_names"=>"Delgado Díaz44", "phone"=>"214123244", "identification"=>"32312", "guardian"=>"3213123", "role"=>"student", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Editar", "id"=>"12"} 
    User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 12]] 
Unpermitted parameters: username, names, last_names, phone, identification, guardian, role, password, password_confirmation 

を思われるものを、なぜ私のファイルが更新されていませんか?

読んでいただきありがとうございます。

+0

更新は、オブジェクトが正常に更新されたかどうかにかかわらずエラーをスローしません。通常、人々は 'user.update(params)else edit edit show_errors'のようなことをします。' user.update!(params) 'を実行することもできます。それが更新されていない理由を正確に知っている。 – trueinViso

+0

@trueinViso if文でも、ユーザーにリダイレクトされるため、更新を行っているようです。 –

+0

あなたは '!'を試しましたか?あるいは 'user_update_params'を出力して、更新メソッドに送信されていることを確認しますか? – trueinViso

答えて

0

あなたが工夫使用しているので、私はあなたがこのようにそれを設定する必要があると思う:

before_action :configure_permitted_parameters 
    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:account_update) << [:username, :names] 
    end 

コントローラは工夫から継承されていることを確認します

class UsersController < Devise::RegistrationsController 

あなたはそれについての詳細を読むことができますhereおよび強いパラメータに関する部分のhere

関連する問題