Ruby on rails 父模型方法未定义

Ruby on rails 父模型方法未定义,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我是RubyonRails的绝对初学者;我昨晚就开始了。虽然我做了一些修改,但我仍在遵循教程。我制作了一个简单的任务跟踪应用程序,其中项目有与之相关的任务,而不是一个包含帖子和评论的博客 在那之前一切都很顺利。根据教程,我应该能够通过调用comment.post(在我的例子中类似于task.project)来获取注释的父模型。但是,当Rails试图渲染我得到的task.project的部分时,它会引发一个命名错误: undefined method `project' for #<Task

我是RubyonRails的绝对初学者;我昨晚就开始了。虽然我做了一些修改,但我仍在遵循教程。我制作了一个简单的任务跟踪应用程序,其中项目有与之相关的任务,而不是一个包含帖子和评论的博客

在那之前一切都很顺利。根据教程,我应该能够通过调用
comment.post
(在我的例子中类似于
task.project
)来获取注释的父模型。但是,当Rails试图渲染我得到的
task.project
的部分时,它会引发一个命名错误:

undefined method `project' for #<Task:0x7fb0011cf058>
未定义的方法“project”#
我的模型如下:

class Project < ActiveRecord::Base
  validates :name, :presence => true

  has_many :tasks, :dependent => :destroy
end

class Task < ActiveRecord::Base
  validates :name, :presence => :true

  belongs_to :project
end
class项目true
有多个:任务,:依赖=>:销毁
终止
类任务:true
属于:项目
终止
使用rails控制台,我确定我的任务确实有一个
project\u id
方法,该方法返回关联项目的id。因此,我可以通过使用
Project.find(task.Project\u id)
而不是我的部分代码中的
task.Project
来绕过这个问题。不过,这似乎是“错误的”,让我怀疑我的两个模型之间的关系是否以某种方式被打破了

这是怎么回事

更新:如果我注释掉任务模型中的
验证
行,那么它的所有方法都能正常工作。但我不明白为什么会这样


更新2:找到了答案。我使用了符号
:true
,而不是任务模型的
validates
行中的简单布尔值。如果我一开始就更加注意堆栈跟踪,我会更快地发现它。多么令人尴尬的错误

您的代码看起来很完美。但如果您尝试将其加载到控制台中,请尝试先重新加载,然后重试

reload!
task = Task.find(<record-id>)
task.project
重新加载!
task=task.find()
任务.项目

它应该可以工作。

您的代码看起来很完美。但如果您尝试将其加载到控制台中,请尝试先重新加载,然后重试

reload!
task = Task.find(<record-id>)
task.project
重新加载!
task=task.find()
任务.项目

它应该可以工作。

在调试问题时,我多次关闭并重新打开控制台和Rails服务器,所以我认为这不是问题的原因。不管怎样,我尝试了你的建议,但不幸的是,它没有帮助。我的任务类似乎也没有
find
方法。。。不确定这是否与我的其他问题有关<代码>irb(主):002:0>@task=task.find(1)ArgumentError::true是无效选项。应为true、Hash、Regexp、Range或Array@Mitch:您是否有另一个名为“Task”的类?在控制台中尝试
Task.superclass
,看看它说了些什么。@mu,我尝试了
Task.superclass
,它抛出了与上面相同的异常。在堆栈跟踪中,我注意到了一些关于验证的信息,所以我注释掉了模型中的validates行,现在所有的方法(包括
project
)都可以工作了。我仍然不知道为什么会发生这种情况。我将用这些信息更新原始问题。在调试问题时,我多次关闭并重新打开控制台和Rails服务器,因此我认为这不是问题的原因。不管怎样,我尝试了你的建议,但不幸的是,它没有帮助。我的任务类似乎也没有
find
方法。。。不确定这是否与我的其他问题有关<代码>irb(主):002:0>@task=task.find(1)ArgumentError::true是无效选项。应为true、Hash、Regexp、Range或Array@Mitch:您是否有另一个名为“Task”的类?在控制台中尝试
Task.superclass
,看看它说了些什么。@mu,我尝试了
Task.superclass
,它抛出了与上面相同的异常。在堆栈跟踪中,我注意到了一些关于验证的信息,所以我注释掉了模型中的validates行,现在所有的方法(包括
project
)都可以工作了。我仍然不知道为什么会发生这种情况。我将使用此信息更新原始问题。任务是否具有名称属性?也许您还可以包括
schema.rb的相关块。任务是否有name属性?也许您还可以包括
schema.rb的相关块。