我希望仅在模型进入某个状态(例如,sign_in_count> 1)之后才保护rails模型属性不被更改。环顾四周,看到人们使用
attr_readonly
保护属性,我可以使用条件吗?如果没有,是否有替代解决方案?感谢。
答案 0 :(得分:0)
我真的不明白你想做什么,所以这里有一些一般但相关的目的。顺便说一句,在rails 4
中,属性受到保护,但您可以使用protected_attributes
gem来完成rails 3
行为。
顺便说一句,在ruby
中,您可以使用freeze
方法来防止对您已冻结的某些对象进行任何修改。 (Toc检查对象确实已冻结,您可以在该对象上调用frozen?
,这将返回true或false)。
另一个注意事项是,您可以通过调用changed—attributes
来检查模型的某些更改状态,这会返回相对于其原始值更改的字段的哈希值。
编辑:您当然可以设置此声明
attr_readonly :some, :attributes unless some_condition
并定义
def some_condition
sign_in_count > 1
end