ruby-on-rails - 如何处理 xor 条件、rails、外键和 sqlite 数据库?

标签 ruby-on-rails sqlite database-design xor

我想要的是,用 Rails 3.1 以某种方式构建它: UML

如果 Ab_id 设置了一个 id,那么应该不可能为 c_id 设置一个 id。当然反之亦然。

我希望我可以通过迁移在数据库级别进行操作(检查约束?)。这有可能吗? 还是在经过验证的模型中执行此操作更实惠?

我的环境:

  • ruby 1.9.3
  • rails 3.1.3
  • SQLite 3.7.3

最佳答案

您可以通过多态关联来实现这一点,虽然模式看起来与您拥有的不完全一样,但您可以实现相同的目标,让项目 A 属于 B C 但绝不能同时使用。

您可以在此处阅读更多信息:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

在该链接给出的示例中,A 是他们的PictureEmployeeProudct 是您的BC:

(从上面链接的来源复制):

class Picture < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end

class Employee < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

class Product < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

关于ruby-on-rails - 如何处理 xor 条件、rails、外键和 sqlite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656992/

相关文章:

java - 如何从内存中流式传输sqlite?

sql - 使用sqlite计算运行平均值

sql - 如何声明数组的元素不可为空?

ios - 存储日期组件而不是日期

sql - 插入新记录时如何根据列值忽略多列上的唯一索引

ruby-on-rails - 使用 nginx 提供预编译 Assets

ruby-on-rails - 使用 Zlib 和 Rails 呈现预压缩数据

ruby-on-rails - 当关联对象有更多条件时如何预加载?

java - 如何加快国外 Collection 的急切加载速度?

ruby-on-rails - Rails 4 自定义管理后端