1

私はこれに少し立ち往生しており、次のエラーが発生する正確な理由を理解できません。

未定義のメソッド `entries_path' for <%= form_for(@entry) do |f| %>

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

なぜこのエラーが発生するのかわかりません。

4

2 に答える 2

1

form_for@entry(つまりentries_path) に関連付けられたパスを参照する必要がありますが、ファイルは必須の複数形 ( ) ではなくroutes.rb単数形のリソース ( ) を使用しているため、適切なパス名が存在しません。:entry:entries

Rails モデルは単数形を使用しますが、Rails データベース、コントローラー、ビューは複数形を使用し、これはルート ファイルに反映されます。これを覚えておく 1 つの方法は、モデルは各オブジェクトが属する単一のクラスを記述していることです。他のほとんどすべてが複数のインスタンスの管理を担当するため、それら自体は単数形 (例: ) ですが、複数形 (例:ディレクトリ)でController管理するオブジェクトを参照します。EntriesControllercontroller/entries

これについての詳細は、Ruby on Rails の複数形 (コントローラー) および単数形 (モデル) の規則 - 説明を参照してください。

于 2013-09-12T04:33:05.877 に答える
0

コントローラーとビューは常に複数形で扱う必要があります。たとえば、オブジェクト Book がある場合、コントローラーの宣言は次のようになります。

class BooksController < ApplicationController

ビュー(new、edit、show、index)は、という名前のフォルダー内にある必要があります

/本

また、ルートの宣言は複数形にする必要があります。この場合、ルートは次のように宣言する必要があります。

リソース :本

ターミナルで次のコマンドを実行して、コントローラーとビュー フォルダーの生成を試みることができます。

rails generate controller name_of_object_in_plural_form(サンプル、本用)

スクリプトは、books_controller.rb という名前のコントローラーと、/views の下の /books フォルダーを生成します。

于 2013-09-12T07:20:30.423 に答える