Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActionView中定义范围的NoMethodError_Ruby On Rails - Fatal编程技术网

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
。然后更新问题以反映真实的类名。