Ruby on rails 未定义的方法`#u路径';在表单中,路线定义在:resources
我已经在这上面停留了一段时间,无法找出出现以下错误的确切原因: 未定义的方法“entries\u path” 入口控制器:Ruby on rails 未定义的方法`#u路径';在表单中,路线定义在:resources,ruby-on-rails,Ruby On Rails,我已经在这上面停留了一段时间,无法找出出现以下错误的确切原因: 未定义的方法“entries\u path” 入口控制器: class EntryController < ApplicationController def index end def new @entry = Entry.new end def create @entry = Entry.new(user_params) if @entry.save redir
class EntryController < ApplicationController
def index
end
def new
@entry = Entry.new
end
def create
@entry = Entry.new(user_params)
if @entry.save
redirect_to @entry
else
render 'new'
end
end
private
def user_params
params.require(:entry).permit(:comment, :flag)
end
end
以及出现错误的新页面:
<%= form_for(@entry) do |f| %>
<%= f.label :comment %>
<%= f.text_field :comment %>
<%= f.label :flag %>
<%= f.text_field :flag %>
<% end %>
我无法理解为什么会出现此错误。
的表单(u
需要引用与@entry
关联的路径(即entries(u path
)),但您的routes.rb
文件使用资源的单数形式(:entry
)而不是所需的复数形式(:entries
),所以正确的路径名不存在
Rails模型使用单数形式,但是Rails数据库、控制器、视图使用复数形式,这反映在routes文件中。记住这一点的一种方法是,模型描述每个对象所属的单个类。几乎所有其他内容都负责管理多个实例,因此虽然它们本身是单数的(例如Controller
),但它们以复数形式引用它们管理的对象(例如entriesconner
,Controller/entries
目录)
有关这方面的更多讨论,请参见。的表单\u需要引用与@entry
关联的路径(即条目\u路径
),但您的路由.rb
文件使用资源的单数形式(:entry
)而不是所需的复数形式(:entries
),所以正确的路径名不存在
Rails模型使用单数形式,但是Rails数据库、控制器、视图使用复数形式,这反映在routes文件中。记住这一点的一种方法是,模型描述每个对象所属的单个类。几乎所有其他内容都负责管理多个实例,因此虽然它们本身是单数的(例如Controller
),但它们以复数形式引用它们管理的对象(例如entriesconner
,Controller/entries
目录)
有关这方面的更多讨论,请参阅。控制器和视图应始终以复数形式处理。例如,如果您有一个对象手册,那么控制器声明应该是
类BooksController
视图(新建、编辑、显示、索引)应位于名为
/书
此外,路线声明应采用复数形式。在这种情况下,应将路线声明为
资源:书籍
您可以尝试通过在终端中运行来生成控制器和视图文件夹:
rails以复数形式生成\u对象\u的控制器名称\u(对于示例、书籍)
脚本将生成名为books_controller.rb的控制器和/views控制器下的/books文件夹,并且视图应始终以复数形式处理。例如,如果您有一个对象手册,那么控制器声明应该是
类BooksController
视图(新建、编辑、显示、索引)应位于名为
/书
此外,路线声明应采用复数形式。在这种情况下,应将路线声明为
资源:书籍
您可以尝试通过在终端中运行来生成控制器和视图文件夹:
rails以复数形式生成\u对象\u的控制器名称\u(对于示例、书籍)
脚本将在/views下生成名为books\u controller.rb和/books folder的控制器。您确定是新建
页面出错了吗?是否有可以共享的堆栈跟踪?入口
型号如何?entries\u path
在您的代码中出现在哪里?是的,在新页面中,entries\u path不会出现在我的代码中的任何地方。如何获取堆栈跟踪?因此我使用“rails生成模型条目注释:text flag:binary”创建了一个模型,但它最终创建了一个包含名称条目的表,这真是令人困惑。这很正常。Rails使用ActiveRecord类的复数形式来命名表。实际上,这就是路由文件的问题所在。应该是resources:entries
。这不是
而不是
?您确定是新的页面给了您错误吗?是否有可以共享的堆栈跟踪?入口
型号如何?entries\u path
在您的代码中出现在哪里?是的,在新页面中,entries\u path不会出现在我的代码中的任何地方。如何获取堆栈跟踪?因此我使用“rails生成模型条目注释:text flag:binary”创建了一个模型,但它最终创建了一个包含名称条目的表,这真是令人困惑。这很正常。Rails使用ActiveRecord类的复数形式来命名表。实际上,这就是路由文件的问题所在。它应该是resources:entries
。这不是
而不是
?我的视图是否仍在entry>new.html.erb下?还是我应该在视图中创建一个entries文件夹?我猜您使用的是rails 4,即使您已经尝试过,它也会显示所有可用于条目的路由。这可能会让您对错误有所了解。@Saad您需要将目录重命名为复数形式。请参阅更新的答案。在相关的点上,如果这是你的第一个Rails项目,而你没有遵循教程,你可能会考虑它。有很多这样的细节,教程是很有帮助的。Hartl one做得特别好而且很受欢迎。我的视图是否仍在entry>new.html.erb下?还是应该在视图中创建一个entries文件夹?我猜您使用的是rails 4,即使您已经尝试过,它也会显示所有可用于条目的路由。这可能会让您对错误有所了解。@Saad您需要将目录重命名为复数形式。请参阅更新的答案。在相关点上,如果这是你的fir
<%= form_for(@entry) do |f| %>
<%= f.label :comment %>
<%= f.text_field :comment %>
<%= f.label :flag %>
<%= f.text_field :flag %>
<% end %>