ruby-on-rails-3 – 防止在Rails模型中更改一个字段
我有两个相关的模型 – 比如说活动和步骤.活动has_many:steps和Step belongs_to:活动,这意味着步骤表具有一个activity_id列.
这是在Hobo 1.3,所以Rails 3.0. 我想要的是确保在创建步骤之后不可能将步骤移动到另一个活动.我们不希望更改activity_id字段. 我从编辑表单中删除了该字段,但我正在寻找一个更强的约束.本质上,我想验证更新(而不是创建)列不被触摸. Hobo的文档没有提到Hobo中的任何内容,所以我正在看Rails validations,但到目前为止,我还没有发现我记得的“只做更新”约束,也没有发现某些东西不是改变. 解决方法
您可以使用attr_readonly:your_field_name将属性声明为read_only.
但是,如果您尝试编写此属性,则不会创建错误,它将以静默方式失败. (所有SQL更新将忽略此属性) 另一个选择可能是,为这种情况写一个验证,可能如下所示: class Step < ActiveRecord::Base validate :activity_id_not_changed private def activity_id_not_changed if activity_id_changed? && self.persisted? errors.add(:activity_id,"Change of activity_id not allowed!") end end end 坚持?返回true,如果这不是一个新的记录,它不会被销毁. 链接: http://api.rubyonrails.org/classes/ActiveRecord/ReadonlyAttributes/ClassMethods.html#method-i-readonly_attributes http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-persisted-3F (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |