Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails共享错误消息无法定义方法或对象_Ruby On Rails - Fatal编程技术网

Ruby on rails RubyonRails共享错误消息无法定义方法或对象

Ruby 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

我一直在阅读MichaelHartl的RubyonRails教程,现在我正在尝试发布microposts。我试图在表单中呈现一条错误消息,书中说要将f.object分配给object。它总是给我一个错误,“object”是一个未定义的局部变量或方法。代码如下:

共享/\u错误\u消息.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 %>

更新:

下面的答案不正确。有关详细信息,请参见注释

原始答复:

我不确定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 %>