当条件满足时,如何在模型中将某些字段设置为只读?

kle*_*lew 0 forms validation ruby-on-rails readonly

我有这样的模特:

class Person
  has_many :phones
  ...
end

class Phone
  belongs_to :person
end
Run Code Online (Sandbox Code Playgroud)

当某些条件得到满足时,我想禁止更换与人相关的手机.禁止字段设置为disabledhtml格式.当我添加自定义验证来检查它时,即使手机没有更改,也会导致保存错误.我认为这是因为传递了带属性的哈希

@person.update_attributes(params[:person])
Run Code Online (Sandbox Code Playgroud)

并且有一些带有电话号码的数据(因为表格包含电话字段).如何仅更新已更改的属性?或者如何创建在字段未更改时忽略保存的验证?或者也许我做错了什么?

now*_*owk 5

你也许可以使用

changed  # => []
changed? # => true|false
changes  # => {}
Run Code Online (Sandbox Code Playgroud)

提供的方法.

changed方法将返回一组已更改的属性,您可以对其进行include?(...)反对以构建您要查找的功能.

也许是这样的

validate :check_for_changes

def check_for_changes
  errors.add_to_base("Field is not changed") unless changed.include?("field")
end
Run Code Online (Sandbox Code Playgroud)