覆盖访问器后使用关联方法

时间:2011-11-22 01:59:33

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个看起来像这样的甲板模型:

class Deck < ActiveRecord::Base
  has_many :cards

  def cards
    ["ace"] + Cards.where(:deck_id => self.id)
  end
end 

我通过重新定义卡访问器丢失了关联方法。例如,我做不到:

@deck = Deck.new
@cards = d.cards.build

如何恢复关联方法?

如果我能够在不知道我事先做过什么的情况下访问原始的cards方法,那将是很好的。我认为最后一个警告排除了alias_method_chain作为解决方案。

1 个答案:

答案 0 :(得分:0)

正如在注释中提出的那样,你不应该覆盖Rails生成的方法,因为它的返回不是简单数组 - 它返回Relation实例。对于所有默认关联,使用将在创建对象之前执行的before_create。     class Deck&lt;的ActiveRecord :: Base的       has_many:卡片       before_create:add_default_cards

  private:
  def add_default_cards
    cards.create! :name => 'ace'
  end
end