Ruby on rails 在rails模型中,自我指代父亲场中的男性和母亲场中的女性?

Ruby on rails 在rails模型中,自我指代父亲场中的男性和母亲场中的女性?,ruby-on-rails,database,postgresql,models,Ruby On Rails,Database,Postgresql,Models,我正在Rails中开发一个特定动物的数据库,我希望有父字段和母字段 这可能没什么大不了的,但我希望用户能够在父字段中只选择男性,在母字段中只选择女性,然后验证它以确保安全。然而,现在,当用户从动物的表格中选择时,会同时得到雄性和雌性 这可能很容易解决,但数据库呢?如何在数据库中定义这种特殊的关系?在铁路方面,首选的方式是什么?我应该实现一个方法吗,那就是AnimalName.females 其他信息: 数据库后端:PostgreSQL在Rails端,您可以使用自定义验证器来确保动物的父亲是雄性,

我正在Rails中开发一个特定动物的数据库,我希望有父字段和母字段

这可能没什么大不了的,但我希望用户能够在父字段中只选择男性,在母字段中只选择女性,然后验证它以确保安全。然而,现在,当用户从动物的表格中选择时,会同时得到雄性和雌性

这可能很容易解决,但数据库呢?如何在数据库中定义这种特殊的关系?在铁路方面,首选的方式是什么?我应该实现一个方法吗,那就是AnimalName.females

其他信息:


数据库后端:PostgreSQL

在Rails端,您可以使用自定义验证器来确保动物的父亲是雄性,母亲是雌性。我不太了解你们的具体型号,但这里有一个例子:

class Animal < ActiveRecord::Base

  belongs_to :father, :class_name => "Animal"
  belongs_to :mother, :class_name => "Animal"

  validate :ensure_mother_and_father_are_correct_gender

  private

  def ensure_mother_and_father_are_correct_gender
    if father.gender != "male"
      errors.add(:base, "Father is not a male")
    end

    if mother.gender != "female"
      errors.add(:base, "Mother is not a female")
    end
  end

end
如果提供了错误性别的父母,这将防止保存您的动物记录。您可能还需要在界面端引入某种验证——或者至少是选项限制,例如,如果您从下拉列表中选择他们的父母,请将提供的选项仅限于男性和女性:


猴子,:性别=>雄性,…%>或者随便什么。

您可以添加当前模式和关联的详细信息吗?请只添加与此问题相关的部分。目前,只有名称:字符串、性别:整数、父亲:引用和母亲:引用字段和子项计数计数器缓存。这可能是最简单的答案。非常感谢。