加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 防止在Rails模型中更改一个字段

发布时间:2020-12-16 19:27:02 所属栏目:百科 来源:网络整理
导读:我有两个相关的模型 – 比如说活动和步骤.活动has_many:steps和Step belongs_to:活动,这意味着步骤表具有一个activity_id列. 这是在Hobo 1.3,所以Rails 3.0. 我想要的是确保在创建步骤之后不可能将步骤移动到另一个活动.我们不希望更改activity_id字段. 我
我有两个相关的模型 – 比如说活动和步骤.活动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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读