Создание подклассов средств доступа ActiveRecord - PullRequest
2 голосов
/ 29 августа 2011

Каков рекомендуемый способ обернуть аксессор 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 ]

1 голос
/ 29 августа 2011

Вы можете определить порядок по умолчанию, например

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

RAND () будет работать только в том случае, если ядро ​​базы данных поддерживает это (Mysql поддерживает)

0 голосов
/ 29 августа 2011

Надеюсь, это поможет ..

class Post < ActiveRecord::Base
  has_many :comments

  def comments_with_randomness
    comments_without_randomness.shuffle
  end

  alias_method_chain :comments, :randomness
end

Теперь вызов @post.comments должен возвращать комментарии в случайном порядке.Но, помните, это был бы массив, а не активное отношение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...