1

ruby on rails のチュートリアルに従っています。そして、サインアップページでのみエラーを受け取りました。

undefined local variable or method `object' for #<#<Class:0x007feb442f6a98>:0x007feb442f8438>

抽出されたソース (行 #1 付近):

1: <% if object.errors.any? %>
2:  <div id="error_explanation">
3:      <h2>
4:          <%= pluralize(object.errors.count, "error") %>

これが私のerror_messagesファイルです。

<% if object.errors.any? %>
    <div id="error_explanation">
        <h2>
            <%= pluralize(object.errors.count, "error") %>
            prohibited this <%= object.class.to_s.underscore.humanize.downcase %> from being saved:
            </h2>
            <p>There were problems with the following fields:</p>
            <ul>
            <% object.errors.full_messages.each do |message| %>
            <li><%= message %></li>
            <% end %>
            </ul>
    </div>

    <% end %>

これが私の users/new.html ファイルです。

<h1>Sign up</h1>

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<%= render 'fields', :f => f %>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
4

1 に答える 1

0

渡されたオブジェクト:object =>は、パーシャルと同じ名前のパーシャルのローカル変数になります。したがって、この場合、パーシャルが呼び出されるerror_messagesと、最初の行は次のようになります。

<% if error_messages.errors.any %>

明らかにこれは少し紛らわしいように見えます-これはおそらくパーシャルの命名が間違っていることを示唆しています。

shared/_error_messagesまた、部分ビューファイルには、完全なビューではないことを示すために、アンダースコアで始まる名前を付ける必要があります。render :partial => 'shared/error_messages'それらは;でレンダリングする必要があります。ローカル変数に:objectはアンダースコアが付いていません。

パーシャルのレンダリングに関するいくつかのドキュメントを参照してください。

于 2013-02-05T17:13:38.450 に答える