数组元素的自定义访问器

时间:2010-04-04 11:47:56

标签: ruby-on-rails

我正在尝试为特定标志设置为true的数组创建一个元素的访问器:

class EntranceObject < ActiveRecord::Base
  has_many :subscribers

  def customer
      self.subscribers.find(:first, :conditions => {:is_customer => true})
  end

  def customer=(customer_params)
    self.subscribers << Subscriber.new(:name => customer_params[:name],
                                       :apartment => customer_params[:apartment],
                                       :phone_number => customer_params[:phone_number],
                                       :is_customer => true)
  end
end

class Subscriber < ActiveRecord::Base
  belongs_to :entrance_object

  validates_presence_of :name, :apartment         
end

我如何验证此访问者以突出显示视图中缺少的字段?

P.S。我是RoR的新手,也许还有另一种方法可以使用集合中的一个元素进行此类工作?感谢。

1 个答案:

答案 0 :(得分:0)

你可以让Rails魔法为你做的工作。

class EntranceObject < ActiveRecord::Base
  has_many :subscribers
  has_one :customer, :class_name => "Subscriber", :foreign_key => "entrance_object_id", :conditions => {:is_customer => true}

  validates_associated :customer
end

validates_associated将验证客户对象并将错误存储在entrance_object.customer.errors中(因此您必须这样做才能显示视图中的所有错误。)

有关validates_associated的文档,请参阅here