2017-01-28 9 views
0

Я использую проект в своем проекте, я хочу обновить профиль других пользователей с моей панели администратора, так что только пользователи с ролью администратора могут получить к нему доступ, так как это поведение сильно отличается от метода по умолчанию , я решил создать отдельный контроллер, поэтому я могу манипулировать пользователями как обычные записи, но по какой-то причине, когда я обновляю пользователей, записи не обновляются в базе данных.ruby ​​on rails запись не обновляется

ЭТИ МОИ МАРШРУТЫ

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 

ЭТО МОЙ 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 

ЭТ МОЯ VIEW

<% 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 %> 

Таким образом, после прочтения моего стека, он действительно пытается сделать патч, но затем он говорит, что параметры не разрешены, что очень странно, поскольку я уже разрешал им мой метод 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

обновление не выдает ошибки независимо от того, был ли объект успешно обновлен. Обычно люди делают что-то вроде 'if user.update (params) else render 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, в частях о сильных параметрах.

 Смежные вопросы

  • Нет связанных вопросов^_^