ruby-on-rails - 如何为 ActiveRecord belongs_to 关联声明可选条件?

标签 ruby-on-rails ruby rails-activerecord

Rails ActiveRecord 为 belongs_to 提供了一个optional 选项。考虑允许外键为 null 并允许关联在对象创建期间为 null 但在后续保存期间需要它存在的用例。例如,新成员可能没有初始组,但成员的任何进一步更新都需要组关联。

optional 选项值本身可以是有条件的吗?例如,

class Member < ApplicationRecord
  belongs_to :group, optional: -> { new_record? }
end

optional: true 的行为相同,我们可以推断 optional 选项解析仅检查真值。

自定义验证器是满足此用例的实用方法吗?

最佳答案

似乎向 optional 选项提供 lambda 不起作用(虽然我还没有尝试过)。我看着 source code这就是 optional 的使用方式。

required = !reflection.options[:optional]

如果需要,Rails 只需像这样添加存在验证:

model.validates_presence_of reflection.name, message: :required

我相信你可以通过这样的方式走自定义路线:

class Member < ApplicationRecord
  belongs_to :group, optional: true
  validates :group, presence: true, on: :update
end

关于ruby-on-rails - 如何为 ActiveRecord belongs_to 关联声明可选条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036112/

相关文章:

javascript - 从sqlite db获取图像并使用JavaScript显示在页面上

ruby-on-rails - ruby 中的 Grunt task runner 相当于什么?

ruby - Ruby 是否有数据库或数据结构来实现关系矩阵?

ruby - 奇怪的 NoMethodError(未定义方法 `name' 为 nil :NilClass)

mysql - Controller 中的 Rails where 或子句

ruby-on-rails - 时间戳列是否意味着响应 bool 方法调用?

ruby-on-rails - 如何使用回形针保存 RMagick 处理的图像而不写入文件

ruby-on-rails - 将每个 JSON 对象保存到模型中

ruby-on-rails - 在 Gemfile 和 .ruby-version Dotfile 中列出 Ruby 版本是一种不好的做法吗?

ruby-on-rails - 如何解决传递货币格式字符串时 erb 抛出的错误