Sql 表列是否部分依赖于另一列?

Sql 表列是否部分依赖于另一列?,sql,ruby-on-rails,sqlite,Sql,Ruby On Rails,Sqlite,我想要两种类型的:布尔列,比如X和Y,其中Y部分依赖于X。当X为真时,Y可以为真或假,但当X为假时,Y必须为假。这可能吗 class AddPrivacyColumnsToPosts < ActiveRecord::Migration def change add_column("posts", "public", :boolean, :default => true) add_column("posts", "collectable", :boolean, :d

我想要两种类型的
:布尔
列,比如X和Y,其中Y部分依赖于X。当X为真时,Y可以为真或假,但当X为假时,Y必须为假。这可能吗

class AddPrivacyColumnsToPosts < ActiveRecord::Migration
  def change
    add_column("posts", "public", :boolean, :default => true)
    add_column("posts", "collectable", :boolean, :default => true)
  end
end
class AddPrivacyColumnsToPoststrue”)
添加列(“posts”,“collectable”,“boolean”,“default=>true”)
结束
结束

其中,
public
为X,
collectable
为Y,即只能收集公共帖子。如果帖子设置为私有(当
public
为false时),则
collectable
应自动设置为false。

我会在保存前回拨帖子

before_save :set_collectable 

def set_collectable 
  if !public? 
    self.collectable = false 
  end
end

我会添加一个保存前回拨到Post

before_save :set_collectable 

def set_collectable 
  if !public? 
    self.collectable = false 
  end
end

是的,这是可能的。有很多方法可以做到这一点,但我不知道你在寻找什么。你有一直在使用的代码吗?@kcdragon刚刚用迁移文件中的代码更新了问题。你是在问怎么做吗?@kcdragon是的,这就是我要问的。是的,这是可能的。有很多方法可以做到这一点,但我不知道你在寻找什么。你有一直在使用的代码吗?@kcdragon刚刚用迁移文件中的代码更新了问题。你是在问怎么做吗?@kcdragon是的,这就是我要问的。谢谢!既然你提到有几种方法可以做到这一点,只是出于好奇。。。还有其他方法吗?可以添加数据库触发器,但在Rails中不太常用。您还可以使用wisper或observer等侦听器来设置可收集,而不是直接使用回调。但我认为答案是你最好的选择,汉克斯!既然你提到有几种方法可以做到这一点,只是出于好奇。。。还有其他方法吗?可以添加数据库触发器,但在Rails中不太常用。您还可以使用wisper或observer等侦听器来设置可收集,而不是直接使用回调。但我认为答案是你最好的选择