Rails方法无法识别

时间:2015-04-08 16:01:41

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.2

我正在阅读有关如何构建博客应用程序的Rails书籍。我刚刚添加了为博客帖子添加评论的功能,而Rails正在抛出一个我无法解决的错误。

根据轨道,方法"发布"在以下行中没有定义:

errors.add(:article_id, "is not published yet") if article && !article.published?

通过追踪,我发现我的文章模型包含该行

scope :published, lambda { where("articles.published_at IS NOT NULL") }

作为一个Rails noob,我并不完全确定"范围"在这种情况下意味着,但我猜它定义了一个可以通过调用article.published?在文章上调用的方法。我是对的吗?

从我在线阅读的内容看来,这个问题可能与我为Rails 4.0编写的书有关,而我使用的是Rails 4.2.0。我需要在此行中进行哪些更改才能使其与Rails 4.2.0一起使用?

1 个答案:

答案 0 :(得分:3)

该错误与您正在使用的Rails版本无关,您只是在错误的对象上调用该方法。

首先请注意,publishedpublished?之间存在差异。第二个有问号。

scope方法定义了一个过滤结果的类方法,因此它可以在类中使用。 e.g。

@articles = Article.published.where()...

您正在使用实例,并且可能想要定义一个实例方法,如:

def published?
  published_at.present?
end