9

このエラーが発生する理由と、それが何を意味するのか正確にはわかりません。

フォームの最初の引数にnilを含めることも、空にすることもできません(3行目)

新しい投稿を追加する

<%= form_for @post do |f| %>  //Error here
<p>
    <%= f.label :title, 'Title' %><br/>
    <%= f.text_field :title %><br/>
</p>
<p>
    <%= f.label :content, 'Content'%><br/>
    <%= f.text_area :content %><br/>
</p>
<p>
    <%= f.submit "Add a New Post" %>
</p>
<% end %>

コントローラ:

class PostsController < ApplicationController
    def index
        @posts = Post.all
    end

    def show
        @post = Post.find(params[:id])
    end

    def new
        @post = Post.new
    end

    def create
        @post = post.new(params[:post])

        if @post.save
            redirect_to posts_path,  :notice => "Your post was saved"
        else
            render "new"
        end
    end

    def edit

    end

    def update

    end

    def destroy

    end
end
4

5 に答える 5

17

PostsControllerこれを従来のビュー名からレンダリングして使用していると仮定すると、newメソッドは新しい名前を作成してPost割り当てる必要があります。

def new
  @post = Post.new
end

(@Yuriyが提案したように)クラス名を使用できますが、従来の方法は新しいオブジェクトをインスタンス化することです。これにより、保存後にエラーをレンダリングするために同じフォームビューを再利用できます。

これが通常どのように見えるかを確認したい場合は、新しいRailsプロジェクトを作成し、scaffoldジェネレーターを使用してサンプルコードを作成します。

于 2013-03-13T07:46:31.523 に答える
1

これを使用します(推奨されません)。動作するはずです。

<%= form_for Post.new do |f| %>
于 2016-02-19T20:13:25.163 に答える
1

同じエラーメッセージが表示されていました。このエラーメッセージが表示され、simpleformがインストールされていないと思ったときに、simpleformを起動して動作させようとして、フォームをテストするためのサブディレクトリをビュー内に作成しました。

のようなインスタンス変数は、サブディレクトリなどの@userビューファイルを含むすべてのビューファイルで使用でき、新しいクライアントの作成に使用されると想定しました。コントローラー で作成されたときなどに使用されたときに評価されるように、私の仮定は正しくありませんでした。@clientsclients/_form@userNilclients/_form@user

于 2017-10-25T16:17:03.347 に答える
0

あなた@postnil

form_for Post代わりに新しい投稿をする必要があります。

于 2013-03-13T07:41:45.317 に答える
0

このエラーを理解するには、このエラーが発生する2つの特定の理由があります。

  1. 定義されていない、またはスペルが間違っているインスタンス変数にアクセスしようとしたとき。たとえば、コントローラーで次のように定義した場合

    def new
      @post = Post.new
     end
    

次のようなビューでアクセスしようとします

  <%= form_for @posts method: :post do |f| %> #plural name

上記の場合、同じエラーが発生します。

もう1つのケースは、インスタンスを定義しない場合、またはコントローラーでインスタンス変数を割り当てずにビューでアクセスしようとすると、同じエラーが発生する場合です。

于 2015-01-17T07:02:47.910 に答える