在rails中创建自定义方法

时间:2011-02-02 15:34:13

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

我正试图想出一个很好的方法来解决这个问题。

假设我有一个包含帖子,标题和不同状态ID的表格。

在我的控制器索引中,我有:

@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 个答案:

答案 0 :(得分:19)

它应该是一个类方法,前缀为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