2

michael hartl による ruby​​ on rails チュートリアルを読んでいて、マイクロポストを投稿しようとしているところです。フォーム内にエラー メッセージを表示しようとしていますが、本には f.object を object に割り当てるように書かれています。「オブジェクト」が未定義のローカル変数またはメソッドであるというエラーが表示され続けます。コードは次のとおりです。

共有/_error_messages.html.erb

<% if object.errors.any? %>
<div id="error_explanation">
    <div class="alert alert-error">
        The form contains <%= pluralize(object.errors.count, "error") %>.
    </div>
    <ul>
        <% object.errors.full_messages.each do |msg| %>
            <li>* <%= msg %></li>
        <% end %>
    </ul>
</div><% end %>

共有/_post_form.html.erb

<%= form_for(@post) do |f| %>
 <%= render 'shared/error_messages', object: f.object %>
   <div class="field">
<%= f.text_area :content, placeholder: "Compose new post..." %>
   </div>
 <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
4

2 に答える 2

2

アップデート:

下の答えは間違っています。詳細については、コメントを参照してください。

元の答え:

Hartlのチュートリアルが何を言っているのかわかりf.objectませんが、フォームでは定義されていません。これがエラーの原因であると思います(明確にするためにエラー自体を投稿してください)。

この行を変更します:

<%= render 'shared/error_messages', object: f.object %>

<%= render 'shared/error_messages', object: f %>

問題を修正する必要があります。f基本的に、名前を付けてフォームをパーシャルに渡したいobject- それがオプションのobject: f機能です。(パーシャル内で同じ名前を使用する限り、実際には任意の名前を付けることができますobject。このコンテキストでは、名前に特別なことは何もありません。)

それが役立つことを願っています。

于 2012-11-08T04:43:18.763 に答える
0

@postフォームコントローラーを渡すのを忘れたのかもしれません。部分的にレンダリングするとき、コントローラーはどこにあります_post_form.html.erbか? そのコントローラーにがないかどうかを確認し@post = current_user.posts.build、追加します。

于 2012-11-08T05:34:20.253 に答える