我正在开发一个关于铁轨上某些动物的数据库,我想有“父亲”和“母亲”两个字段。
这可能不是什么大问题,但我希望用户能够选择只有男性在父亲领域,只有女性在母亲领域,然后验证它(只是为了确定)。然而,现在,用户在从动物的桌子上进行选择时同时获得雄性和雌性。
这可能很容易解决,但是数据库呢?如何在数据库中定义这种特殊的关系?在铁轨一侧的首选方式是什么?我是否应该实现一个方法,那就是类似animalname.females的方法?
其他信息:
Database Backend: PostgreSQL

最佳答案

在rails方面,您可以使用自定义验证器来确保Animal'sfather是男性(而母亲是女性)。我不太了解你们的具体型号,但这里有一个例子:

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

这将防止您的Animal记录被保存,如果提供了错误的性别家长。您可能还需要在接口端引入某种验证——或者至少是选项限制,例如,如果您从下拉列表中选择他们的父母,请将选项限制为只有男性和女性:
<%= collection_select :father, Animal.where(:species => "monkey", :gender => "male"), ... %>或其他。

关于ruby-on-rails - 在铁路模型中自指父亲领域中的男性和母亲领域中的女性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24204478/

10-12 13:56