我正在阅读有关如何构建博客应用程序的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一起使用?
答案 0 :(得分:3)
该错误与您正在使用的Rails版本无关,您只是在错误的对象上调用该方法。
首先请注意,published
和published?
之间存在差异。第二个有问号。
scope
方法定义了一个过滤结果的类方法,因此它可以在类中使用。 e.g。
@articles = Article.published.where()...
您正在使用实例,并且可能想要定义一个实例方法,如:
def published?
published_at.present?
end