自分のプロジェクトで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
を思われるものを、なぜ私のファイルが更新されていませんか?
読んでいただきありがとうございます。
更新は、オブジェクトが正常に更新されたかどうかにかかわらずエラーをスローしません。通常、人々は 'user.update(params)else edit edit show_errors'のようなことをします。' user.update!(params) 'を実行することもできます。それが更新されていない理由を正確に知っている。 – trueinViso
@trueinViso if文でも、ユーザーにリダイレクトされるため、更新を行っているようです。 –
あなたは '!'を試しましたか?あるいは 'user_update_params'を出力して、更新メソッドに送信されていることを確認しますか? – trueinViso