1

我一直坚持这一点,无法弄清楚我收到以下错误的确切原因:

<%= form_for(@entry) do |f| 的未定义方法 `entries_path' %>

入口控制器:

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 %>

我不知道为什么我会收到这个错误。

4

2 回答 2

1

form_for需要引用与@entry(ie entries_path) 关联的路径,但您的routes.rb文件使用资源的单数形式 ( :entry) 而不是所需的复数形式 ( :entries),因此不存在正确的路径名。

Rails 模型使用单数形式,但 Rails 数据库、控制器、视图使用复数形式,这反映在 routes 文件中。记住这一点的一种方法是模型描述每个对象所属的单个类。几乎所有其他东西都负责管理多个实例,因此虽然它们本身是单数的(例如Controller),但它们指的是它们以复数形式管理的对象(例如EntriesControllercontroller/entries目录)。

请参阅Ruby on Rails 复数(控制器)和单数(模型)约定 -对此的更多讨论的解释。

于 2013-09-12T04:33:05.877 回答
0

控制器和视图应始终以复数形式处理。例如,如果你有一个对象 Book,那么控制器声明应该是

类 BooksController < ApplicationController

并且视图(新、编辑、显示、索引)应该在一个名为的文件夹中

/图书

此外,路线的声明应该是复数形式。在这种情况下,路由应声明为

资源:书籍

您可以尝试通过在终端中运行来生成控制器和视图文件夹:

rails 生成控制器 name_of_object_in_plural_form(用于示例、书籍)

该脚本将在 /views 下生成一个名为 books_controller.rb 的控制器和 /books 文件夹

于 2013-09-12T07:20:30.423 回答