Создание собственного метода в рельсах - PullRequest
4 голосов
/ 02 февраля 2011

Я пытаюсь найти хороший способ сделать это.

Допустим, у меня есть таблица с сообщениями, заголовками и различными идентификаторами статуса.

В моемИндекс контроллера, у меня есть:

@posts = Post.all

Тогда в моей модели у меня есть:

def check_status(posts)
  posts.each do |post|
    # logic here
  end
end

Итак, в моем контроллере у меня есть:

   @posts.check_status(@posts)

но я 'получаю следующую ошибку при загрузке индекса:

undefined method check_status for <ActiveRecord::Relation:>

Есть идеи?

1 Ответ

19 голосов
/ 02 февраля 2011

Это должен быть метод класса с префиксом self.:

def self.check_status(posts)
  posts.each do |post|
    # logic here
  end
end

Тогда вы называете это так:

Post.check_status(@posts)

Вы также можете сделать что-то вроде этого:

def check_status
  # post status checking, e.g.:  
  self.status == 'published'
end

Тогда вы можете вызывать его на отдельных Post экземплярах, таких как:

@posts = Post.all
@post.each do |post|
  if post.check_status
    # do something
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...