teratail header banner
teratail header banner
質問するログイン新規登録
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 3.1

Ruby on Rails バージョン3.1.0はRuby on Railsの特定のバージョンです。2011年8月30日にリリースされました。

Q&A

解決済

1回答

417閲覧

rails 管理者が他者の情報を変更できない

Y.Arai

総合スコア42

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 3.1

Ruby on Rails バージョン3.1.0はRuby on Railsの特定のバージョンです。2011年8月30日にリリースされました。

0グッド

0クリップ

投稿2022/03/16 13:19

編集2022/03/18 05:37

0

0

人材アンケートアプリ開発で、各人のパスワード設定をしますが、
管理者が特定の人材の情報を変更しようとしても、パスワードが要求されます。
例えば、下記の良いうに管理者だけが、imagを変更できるとして、変更したあと
passwordが聞かれます。パスワードは個人しかわからないので、どうしたら良いかわかりません。
個人は、逆にパスワードの変更のみできるようにしています。
ご教授いただけると幸いです。

ruby

1<%= form_with model: user, local: true do |f| %> 2 <% if current_user.admin==true %> 3 <div class="form-group mb-3"> 4 <%= f.label :name %> 5 <%= f.text_field :name, class:"form-control" %> 6 </div> 7 <div class="form-group mb-3"> 8 <%= f.label :image %> 9 <%= f.file_field :image, class:"form-control" %> 10 </div> 11 <% end %> 12 <% if current_user==user || @iconlabel=='new' %> 13 <div class="form-group mb-3"> 14 <%= f.label :password %> 15 <%= f.password_field :password, class:"form-control" %> 16 </div> 17 <div class="form-group mb-3"> 18 <%= f.label :password_confirmation %> 19 <%= f.password_field :password_confirmation, class:"form-control" %> 20 </div> 21 <% end %> 22 <div class="d-grid gap-2 d-md-flex justify-content-md-end mb-3"> 23 <%= f.submit nil, class:"btn btn-primary shadow" %> 24 </div> 25<% end %>

user.rb収載のご要望がありましたので下記に収載します。
なお、このご指摘で、# validates :password, presence: trueをコメントアウトすることで、
パスワードが要求されず変更することができるようになりました。
ただ、validatesの意味がよくわからなくなってきました。
アドバイスがあれば幸いです。

ruby

1class User < ApplicationRecord 2 has_secure_password 3 has_one_attached :image, dependent: :destroy 4 5 validates :name, presence: true 6 validates :email, presence: true, uniqueness:true 7 # validates :password, presence: true 8 9 scope :recent, -> { order(created_at: :desc) } 10 11 has_many :posts, dependent: :destroy 12 has_many :careers, dependent: :destroy 13 14 enum gender: { 男性: 1, 女性: 2} 15 16 def self.ransackable_attributes(auth_object = nil) 17 %w(name idnumber workplace gender admin retired created_at) 18 end 19 20 def self.ransackable_assosiations(auth_object = nil) 21 [] 22 end 23 24 def self.csv_attributes 25 ["idnumber", "name", "workplace", "email", "birth", "join_date", "gender", "retired", "admin", "root", "created_at", "updated_at", "HR"] 26 end 27 28 def self.generate_csv 29 CSV.generate(headers:true, encoding: Encoding::SJIS, row_sep: "\r\n", force_quotes: true) do |csv| 30 csv << csv_attributes 31 all.each do |user| 32 csv << csv_attributes.map{|attr| user.send(attr)} 33 end 34 end 35 end 36 37end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2022/03/17 02:06

model User のcodeを載せて
Y.Arai

2022/03/17 12:03

ありがとうございます。 class User < ApplicationRecord has_secure_password has_one_attached :image, dependent: :destroy validates :name, presence: true validates :email, presence: true, uniqueness:true validates :password, presence: true scope :recent, -> { order(created_at: :desc) } has_many :posts, dependent: :destroy has_many :careers, dependent: :destroy enum gender: { 男性: 1, 女性: 2} def self.ransackable_attributes(auth_object = nil) %w(name idnumber workplace gender admin retired created_at) end def self.ransackable_assosiations(auth_object = nil) [] end def self.csv_attributes ["idnumber", "name", "workplace", "email", "birth", "join_date", "gender", "retired", "admin", "root", "created_at", "updated_at", "HR"] end def self.generate_csv CSV.generate(headers:true, encoding: Encoding::SJIS, row_sep: "\r\n", force_quotes: true) do |csv| csv << csv_attributes all.each do |user| csv << csv_attributes.map{|attr| user.send(attr)} end end end end
winterboum

2022/03/17 13:44

他の方が見にくいから 質問欄を編集してそちらに移して
guest

回答1

0

ベストアンサー

validates :password, presence: true は 初期登録のときにパスワードの設定を必須とするためのものです。
でも
以降の編集ではパスワードは不要なので
validates :password, presence: true, on: :create
とすれば良いでしょう。

投稿2022/03/18 07:08

winterboum

総合スコア23653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問