如何处理xor条件,rails,外键和sqlite数据库?

Rob*_*bin 6 sqlite database-design ruby-on-rails xor

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

如果A设置了id b_id,则不应该为其设置id c_id.而且反过来也是如此.

我希望我可以从数据库级别进行迁移(检查约束?).这有点可能吗?或者在具有验证的模型中执行此操作是否更实惠?

我的环境:

  • Ruby 1.9.3
  • Rails 3.1.3
  • SQLite 3.7.3

myn*_*fey 2

您可以通过多态关联来实现此目的,尽管模式看起来与您所拥有的不完全相同,但您可以实现相同的目标,让一个项目A属于 aB或 a C,但绝不能同时属于两者。

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

在该链接给出的示例中,A是他们的Picture, 和EmployeeProudct您的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
Run Code Online (Sandbox Code Playgroud)