2

我一直在阅读 michael hartl 的 ruby​​ on rails 教程,我正在尝试发布微博。我正在尝试在表单中呈现错误消息,并且书中说将 f.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 回答