【问题标题】:undefined method `sranje' for #<Article:0x0000000ccab870> for scope rails 4.2.5用于范围 rails 4.2.5 的 #<Article:0x0000000ccab870> 的未定义方法 `sranje'
【发布时间】:2016-03-04 01:21:39
【问题描述】:

那么我该如何解决这个问题...

class Article < ActiveRecord::Base
  belongs_to :user
  has_and_belongs_to_many :tags, -> {order :name}

  validates :title, presence: true, length: {minimum: 4} 
  validates :body, presence: true, length: {minimum: 4} 

  accepts_nested_attributes_for :tags

  scope :sranje, -> { where('published_at <= ?', Time.current) }

  def self.articles_order 
    self.all.order('published_at DESC')
  end

  # def self.sranje
  #   self.where('published_at <= ?', Time.current)
  # end
end

现在,当我调用范围时,我得到了错误 #

的未定义方法“sranje”

当我在控制台中尝试范围时,它可以工作,即 (user.artilces.sranje) ... 那么如何使它适用于应用程序,我在哪里链接范围??...

【问题讨论】:

  • 页面上怎么称呼?
  • 是的,我尝试在控制器上进行链接,没有成功..它不应该显示将要发布的文章..
  • @GokuSan - 你必须在 Article.sranje 这样的类上调用它。而不是在像 @article.sranje 这样的实例上调用它
  • @VenkatCh donno 范围不应显示将要发布的文章,而在控制台中它就是这样做的..
  • @GokuSan - 所以,请尝试像在控制台中那样使用,而不是在实例上调用范围方法。 (您的问题标题只是说,您尝试在 Article 实例上调用范围方法,这是不正确的。

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


【解决方案1】:

你不能用像这样的变量来调用作用域

@article.sranje

如果你想这样做,那么添加你的类

def sranje
 Article.where('published_at <= ?', Time.zone.now)
end

【讨论】:

  • 你能解释一下你想要做什么吗?
  • 我希望明天的文章直到明天才显示。这就是...的范围。
【解决方案2】:

问题自己解决了,不知道如何.. 在文章控制器中的创建操作中,我更改了“redirect_to ...”并在视图/文章/索引中使用 Article.sranje.each .... 在我向这里寻求帮助之前,我尝试了大约 10 次,但 11 次是一种魅力:) 感谢您的帮助...

P.S 如果这很重要,我还清理了缓存....

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多