我是Ruby on Rails的绝对初学者;我昨晚开始了。我正在关注Getting Started with Rails教程,虽然我做了一些修改。我正在制作一个简单的任务跟踪应用程序,而不是带有帖子和评论的博客,其中项目有与之关联的任务。
在step #9 (Deleting Comments)之前,一切都很顺利。根据教程,我应该能够通过调用comment.post
来获取评论的父模型,在我的案例中,task.project
类似于task.project
。但是当Rails尝试渲染我得到undefined method `project' for #<Task:0x7fb0011cf058>
的部分时,它会引发NoMethodError:
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
我的模型如下:
project_id
使用rails控制台,我确定我的任务确实有Project.find(task.project_id)
方法,该方法返回关联项目的ID。因此,我可以在我的部分中使用task.project
而不是validates
来解决问题。但这似乎是“错误的”,让我想知道我的两个模型之间的关系是否在某种程度上被打破了。
这里发生了什么?
更新:如果我在任务模型中注释掉:true
行,那么它的所有方法都能正常运行。我不明白为什么会这样。
更新2:想出来。我使用符号validates
而不是我的任务模型的{{1}}行中的简单布尔值。如果我首先更多地关注堆栈跟踪,我会更快地弄清楚它。多么尴尬的错误!
答案 0 :(得分:0)
您的代码看起来很完美。但如果您尝试进入控制台,请先尝试重新加载,然后重试
reload!
task = Task.find(<record-id>)
task.project
应该有效。