子类化ActiveRecord访问器

时间:2011-08-29 16:29:19

标签: ruby-on-rails activerecord

包装ActiveRecord访问器的推荐方法是什么?

给出类似

的内容
class Post < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :post
end

我希望能够证明,例如,@post.comments会返回随机排序的评论。

当然我可以创建另一种方法,比如random_comments,但我想知道是否存在更少错误的方法(我不想记得调用random_comments方法)。

调用super不起作用,因为comments类在Post类上反射创建而不是继承。

那你怎么做呢?

2 个答案:

答案 0 :(得分:1)

您可以定义默认顺序,例如

has_many :comments, :order => "RAND()" 

RAND()仅在数据库引擎支持时才有效(Mysql支持)

答案 1 :(得分:0)

希望这会有所帮助..

class Post < ActiveRecord::Base
  has_many :comments

  def comments_with_randomness
    comments_without_randomness.shuffle
  end

  alias_method_chain :comments, :randomness
end

现在,调用@post.comments应该以随机顺序返回注释。但是,请记住,它将是一个数组而不是一个活跃的关系。