我一直坚持这一点,无法弄清楚我收到以下错误的确切原因:
未定义的方法`entries_path'用于<%= form_for(@entry)do | f | %GT;
entry_controller:
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
路线有:
resources :entry
以及发生错误的新页面:
<%= form_for(@entry) do |f| %>
<%= f.label :comment %>
<%= f.text_field :comment %>
<%= f.label :flag %>
<%= f.text_field :flag %>
<% end %>
我无法弄清楚为什么我会收到此错误。
答案 0 :(得分:1)
form_for
需要引用与@entry
相关联的路径(即entries_path
),但您的routes.rb
文件使用资源的单数形式(:entry
)而不是所需的复数形式(:entries
),因此不存在正确的路径名称。
Rails模型使用单数形式,但Rails数据库,控制器,视图使用复数形式,这反映在routes文件中。记住这一点的一种方法是模型描述每个对象所属的单个类。其他所有东西都负责管理多个实例,所以虽然它们本身是单数的(例如Controller
),但它们指的是他们以复数形式管理的对象(例如EntriesController
,{{1目录)。
有关此问题的详细讨论,请参阅Ruby on Rails plural (controller) and singular (model) convention - explanation。
答案 1 :(得分:0)
控制器和视图应始终以复数形式处理。例如,如果您有一个对象Book,那么控制器声明应该是
类BooksController&lt; ApplicationController中
并且视图(new,edit,show,index)应该位于名为
的文件夹中/书籍
此外,路线声明应采用复数形式。在这种情况下,路由应声明为
资源:书籍
您可以尝试通过在终端中运行来生成控制器和视图文件夹:
rails生成控制器name_of_object_in_plural_form(样本,书籍)
该脚本将在/ views
下生成名为books_controller.rb和/ books文件夹的控制器