表单中未定义的方法`_path',路由定义在:resources

时间:2013-09-12 03:57:52

标签: ruby-on-rails

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

未定义的方法`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 %>

我无法弄清楚为什么我会收到此错误。

2 个答案:

答案 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文件夹的控制器