:first_name, :last_name # these shouldn't be locked.
:social_no, :dob, :birth_country # these should be locked.
现在的问题是:
-
用户可以在创建/更新时放置任何属性数据。
-
-
假设创建时可锁定字段为空,
i) 在第一次更新用户集时:没有。
iii)在第3次更新时,用户集:出生地\国家/地区,但不能更改:社会\否&:出生日期。
进一步说明,在第一次设置数据之后,无论是创建还是更新,一次还是任何更新操作,都需要锁定可锁定字段。
我的解决方案是:
class User < ApplicationRecord
attr_accessor :editable_by_admin
validate :validate_locked_attrs_not_editable, on: :update, unless: :editable_by_admin?
def editable_by_admin?
self.editable_by_admin == true
end
def validate_locked_attrs_not_editable
old_record = User.find(id)
User.locked_attrs.each do |attr|
unless old_record.send(attr).blank?
if old_record.send(attr) != self.send(attr)
self.errors.add(attr, "can't be edited.")
end
end
end
end
def self.locked_attrs
%i[
first_name
last_name
dob
birt_country
].freeze
end
end
虽然这个解决方案是有效的,但我想这不是一个好方法,有没有其他方法可以最好地解决这个问题。非常感谢。