Ruby on rails ActionView中定义范围的NoMethodError
在我的模板模型中,我有Ruby on rails ActionView中定义范围的NoMethodError,ruby-on-rails,Ruby On Rails,在我的模板模型中,我有 # models/template.rb class Template < ActiveRecord::Base scope :recent, -> { order('created_at DESC') } end 我得到以下错误: undefined method `recent' for ActionView::Template:Class 有可能做我想做的事吗?如果改用实例变量,有更好的方法吗?我避免使用后一种建议,因为我觉得这会增加一层复杂性。
# models/template.rb
class Template < ActiveRecord::Base
scope :recent, -> { order('created_at DESC') }
end
我得到以下错误:
undefined method `recent' for ActionView::Template:Class
有可能做我想做的事吗?如果改用实例变量,有更好的方法吗?我避免使用后一种建议,因为我觉得这会增加一层复杂性。事实证明,
Template
应该是一个保留的类名,原因是。作为解决方法,我使用了以下调用
- ::Template.recent.each do |template|
%h1= template.title
感谢@D-side在评论中提出的建议。事实证明,
Template
应该是一个保留的类名,因为。作为解决方法,我使用了以下调用
- ::Template.recent.each do |template|
%h1= template.title
感谢@D-side在评论中提出的建议。好吧。。。情况变得有点棘手。
您有自己的模板
类。但是还有ActionView::Template
视图是在ActionView
实例的上下文中执行的(您可以通过在其中执行binding.pry
并查看self
来验证这一点)。当您使用裸模板时,Ruby会在最近的范围内查找它,从您所在的范围(ActionView
)向上查找
因此,它首先查找ActionView
,结果会弹出ActionView::Template
Oops.
若要解决此问题,假设您不想对当前类执行任何操作,则需要显式指定“Template
来自根作用域”,::Template
,也就是说。。。。情况变得有点棘手。
您有自己的模板
类。但是还有ActionView::Template
视图是在ActionView
实例的上下文中执行的(您可以通过在其中执行binding.pry
并查看self
来验证这一点)。当您使用裸模板时,Ruby会在最近的范围内查找它,从您所在的范围(ActionView
)向上查找
因此,它首先查找ActionView
,结果会弹出ActionView::Template
Oops.
若要解决此问题,假设您不想对当前类执行任何操作,请显式指定“根范围中的模板”::Template
,也就是说。尝试重新加载sercer或console,并使用::Post
而不是Post
再次尝试。这应该让你现在开始工作,但我想知道那门课是从哪里来的。是的,这就是为什么我没有把它贴出来。这不是一个真正的答案,这是一个解决办法。让我们开始调查吧。使用pry
(gem)并执行绑定。在视图中撬,然后在得到的提示中执行显示源代码帖子。看看能给你什么。文件路径是。。。它从哪里来就不存在。有严重的问题。好吧,尝试经典的修复永远不会有伤害。。。是否尝试重新启动?:)<代码>模板
?哈这很有道理。那么,如果您不想移动类,那么您别无选择,只能使用::Template
。然后更新问题以反映真实的类名。尝试重新加载sercer或console,然后使用::Post
而不是Post
重新尝试。这应该让你现在开始工作,但我想知道那门课是从哪里来的。是的,这就是为什么我没有把它贴出来。这不是一个真正的答案,这是一个解决办法。让我们开始调查吧。使用pry
(gem)并执行绑定。在视图中撬,然后在得到的提示中执行显示源代码帖子。看看能给你什么。文件路径是。。。它从哪里来就不存在。有严重的问题。好吧,尝试经典的修复永远不会有伤害。。。是否尝试重新启动?:)<代码>模板
?哈这很有道理。那么,如果您不想移动类,那么您别无选择,只能使用::Template
。然后更新问题以反映真实的类名。