我想要的是,用 Rails 3.1 以某种方式构建它:
如果 A
为 b_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
是他们的Picture
,Employee
和 Proudct
是您的B
和 C
:
(从上面链接的来源复制):
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/