代码只是继承的模型。 但不幸的是验证不起作用。这个想法是从鹦鹉中选择父亲。当我循环@fathers时 - 它会显示所有鹦鹉,但应该只选择年龄超过12岁的鹦鹉等等。或者也许我做错了什么?
模型
class Father < Parrot
has_many :parrots
validates :age, :numericality => { :greater_than => 12}
validates :tribal, :acceptance => true
validates_inclusion_of :sex, :in => %w( Male )
end
视图
<% @fathers.each do || %>
<%= f.name %>
<% end %>
控制器
def index
@parrots = Parrot.all
@fathers = Father.all
end
答案 0 :(得分:1)
验证标准与如何查询数据无关,只是它在将对象写入数据库之前传递了定义的条件。您是说Father
对象没有执行验证并保留无效数据吗?
您确定通过Father
对象保存了所有父亲鹦鹉吗?您的type
列中还应该有一个parrots
列,其中包含“Parrot&#39;或者父亲&#39;值。当您执行Father.all
时,它应该运行如下所示的查询:
SELECT * FROM parrots WHERE type='Father';
过滤掉未通过Father
对象保存的鹦鹉。
如果您只需要从数据库中提取符合Parrots
条件的Father
,则可以使用范围:
class Father < ActiveRecord::Base
self.table_name = 'parrots'
default_scope { where("age > 12 and tribal = 'true' and sex='Male'")}
#whatever else
end
的其他信息
答案 1 :(得分:0)
保存父时使用验证。 &#34;类型&#34; db中的列将确定该类。确保设置正确。
但是,Father
真的是一个单独的类吗?或者只是具有特定属性的Parrot
。似乎Parrot.all将包括所有父亲。
它可能是一个范围。
class Parrot < ActiveRecord::Base
scope :fathers, -> { where(:sex => 'Male').where('age >= 12').where(:tribal => true) }
end
然后你可以通过
获得父亲@fathers = Parrot.fathers