pjm*_*rse 19 validation hobo ruby-on-rails-3
我有两个相关的模型 - 让我们说Activity和Step.Activity has_many :steps并且Step belongs_to :activity,这意味着该表用于steps具有activity_id列.
这是在Hobo 1.3,所以Rails 3.0.
我想要的是确保在Step创建之后无法将步骤移动到另一个步骤Activity.我们不希望这个activity_id领域发生变化.
我已从编辑表单中删除了该字段,但我正在寻找更强的约束.基本上我想验证update(不是create)该列没有被触及.Hobo的文档并没有提出Hobo中的任何类型,所以我正在研究Rails验证,但到目前为止我还没有找到"我只记得更新"这个约束,也没有找到某些东西的验证.改变.
Der*_*don 44
您可以使用read_only声明属性attr_readonly :your_field_name.但是,如果您尝试编写此属性,则不会创建错误,它将无提示失败.(对于所有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
Run Code Online (Sandbox Code Playgroud)
persisted? 返回true,如果这不是新记录且未被销毁.
链接:
http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-persisted-3F
hlc*_*lcs 12
使用验证包含:
validates :activity_id,
inclusion: { in: ->(i) { [i.activity_id_was] } },
on: :update
Run Code Online (Sandbox Code Playgroud)
不需要额外的方法。
| 归档时间: |
|
| 查看次数: |
14426 次 |
| 最近记录: |