Ruby on rails RubyonRails共享错误消息无法定义方法或对象
我一直在阅读MichaelHartl的RubyonRails教程,现在我正在尝试发布microposts。我试图在表单中呈现一条错误消息,书中说要将f.object分配给object。它总是给我一个错误,“object”是一个未定义的局部变量或方法。代码如下: 共享/\u错误\u消息.html.erbRuby on rails RubyonRails共享错误消息无法定义方法或对象,ruby-on-rails,Ruby On Rails,我一直在阅读MichaelHartl的RubyonRails教程,现在我正在尝试发布microposts。我试图在表单中呈现一条错误消息,书中说要将f.object分配给object。它总是给我一个错误,“object”是一个未定义的局部变量或方法。代码如下: 共享/\u错误\u消息.html.erb <% if object.errors.any? %> <div id="error_explanation"> <div class="alert aler
<% 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 %>
更新:
下面的答案不正确。有关详细信息,请参见注释
原始答复:
我不确定Hartl的教程是怎么说的,但是表单上没有定义f.object
,我认为这就是错误的来源(为了清楚起见,请发布错误本身)
更改此行:
<%= render 'shared/error_messages', object: f.object %>
到
应该可以解决这个问题。基本上,您希望将表单f
传递给partial,名称为object
——这就是选项object:f
的作用。(实际上,只要在分部中使用相同的名称,就可以为其命名任何名称。在这种情况下,名称对象
没有什么特别之处。)
希望对您有所帮助。也许您忘了传递一个
@post
表单控制器。渲染部分\u post\u form.html.erb
时,控制器在哪里?检查该控制器中是否没有@post=current\u user.posts.build
,将其添加。“@post”位于静态控制器下,我在其中呈现部分“\u post\u form.html.erb”。正如您在def home下所说,“@post=current_user.posts.build”发布在那里。我这样做了,然后它继续出现另一个错误,称为未定义的方法“errors”。原始错误在_error_messages.html.erb的第1行中表示“未定义的局部变量或#对象”,对象
是生成表单的有效方法。你能指出在Hartl的教程中你从哪里得到这些代码吗?啊,我想我看到了问题所在。尝试将render
调用更改为render partial:'shared/error_messages',locals:{object:f}
。从我所能看到的任何方面嗯。。。奇怪,我看不出有什么区别。
<%= render 'shared/error_messages', object: f %>