我希望能够在数据库中创建一个记录,但随后阻止Rails从那时起进行更改.我知道在DB级别仍有可能进行更改.

我相信attr_readonly在属性级别上做了我想要的事情,但我不想手动指定字段...我宁愿采用更多的白名单方法.

此外,我知道关联有一个:read_only选项,但我不想将对象的"readonlines"限制为是否通过关联获取.

Finally, I want to be able to still destroy a record so stuff like :dependent => :destroy works in the associations.

因此,总结一下:1)允许创建记录,2)允许删除记录,3)防止更改已保存的记录.

推荐答案

看着ActiveRecord::Persistence,一切都在幕后打create_or_update.

def create_or_update
  raise ReadOnlyRecord if readonly?
  result = new_record? ? create : update
  result != false
end

所以只是:

def readonly?
  !new_record?
end

Ruby-on-rails相关问答推荐

rails:如何在表单验证后使用涡轮刷新列表

Trailblazor 操作 -> 集合 :attribute(has_many 通过关联) 与填充器 -> 如何填充 Reform::Form 形式的 slugs 数组?

nginx 中的 Rails 7 Active Storage - 图像中途停止加载 net::ERR_HTTP2_PROTOCOL_ERROR 200

用变量替换 find_or_create_by 中的键

带有块捕获的 FormBuilder 辅助方法在 ERB 中不起作用

如何创建一个融合了另外两个记录的 FactoryBot 工厂?

Ruby的自动代码质量工具?

Rails:包含多态关联

如何在我的 Gemfile 中找到未使用的Ruby

为什么 respond_with 被从 rails 4.2 移除到它自己的 gem 中?

Rails:从视图内渲染视图(不是部分视图)

设计自定义路由和登录页面

获取磁盘上 ActiveStorage 文件的路径

验证一个对象是否有一个或多个关联对象

在 Rails 中复制模型实例

使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

如何为 Rails 迁移定义布尔字段

Ruby on Rails Bootstrap Glyphicons 不工作

rails路由中资源和资源之间的区别?

如何删除删除选项表单 activeAdmin?