Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 在自加入关联中查找用户提供的id的子项_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby 在自加入关联中查找用户提供的id的子项

Ruby 在自加入关联中查找用户提供的id的子项,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我有一个功能性的自我连接关系,其中一个指南有许多孩子,并且属于父母。我需要让用户通过html表单提供一个ID,然后在rails控制台中以单独的形式查找它的子项或父项 @guidelines = Guideline.find(4) @guidelines.children 我得到了合适的孩子,当我得到的时候 @guideline.parent 我找到了合适的父母 由于某种原因,当我将表单定义为 <%= form_tag(guidelines_path, :method => "ge

我有一个功能性的自我连接关系,其中一个指南有许多孩子,并且属于父母。我需要让用户通过html表单提供一个ID,然后在rails控制台中以单独的形式查找它的子项或父项

@guidelines = Guideline.find(4)
@guidelines.children
我得到了合适的孩子,当我得到的时候

@guideline.parent
我找到了合适的父母

由于某种原因,当我将表单定义为

<%= form_tag(guidelines_path, :method => "get", id: "search-form") do %>
  <td><%= label_tag(:seeChildren, "See Immediate Children")%></td>
  <td><%= text_field_tag :seeChildren, params[:seeChildren], placeholder: "Enter ID" %></td>
  <td><%= submit_tag "Search", :name => nil %></td>
<% end %>
应用程序/控制器/指南\u controller.rb

我在终端服务的rails中遇到以下错误:

    Started GET "/guidelines?utf8=%E2%9C%93&seeChildren=4" for 127.0.0.1 at 2014-10-18 14:25:58 -0500
Processing by GuidelinesController#index as HTML
  Parameters: {"utf8"=>"✓", "seeChildren"=>"4"}
  Guideline Load (0.3ms)  SELECT  "guidelines".* FROM "guidelines"  WHERE "guidelines"."id" = ? LIMIT 1  [["id", 4]]
  Rendered guidelines/index.html.erb within layouts/application (4.1ms)
Completed 500 Internal Server Error in 85ms

ActionView::Template::Error (undefined method `each' for nil:NilClass):
    62:     <th>Guideline Text</th>
    63:   </tr>
    64: 
    65:   <% @guidelines.each do |guideline| %>
    66:     <tr>
    67:       <td><%= guideline.id %></td>
    68:       <td><%= guideline.guide_desc %></td>
  app/views/guidelines/index.html.erb:65:in `_app_views_guidelines_index_html_erb__3376611479089996349_70360485758280'


  Rendered /Users/john.dodson/.rvm/gems/ruby-2.1.3@global/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.7ms)
  Rendered /Users/john.dodson/.rvm/gems/ruby-2.1.3@global/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.3ms)
  Rendered /Users/john.dodson/.rvm/gems/ruby-2.1.3@global/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (21.6ms)

有什么想法吗?我感谢你的帮助。我发布了几个问题,通常都不成功,因为我没有提供足够的信息,所以如果您需要查看其他文件,请告诉我。

看起来您可能忘记了在控制器中定义@guidlines,这就解释了为什么您在尝试调用时会收到nil:NilClass的未定义方法“each”错误消息。是的,正如JBMILGROm所说,您忘记了在控制器中提到@guidelines。除了在guidelines中使用错误的单数/复数外,我发现我需要将单个对象强制转换为数组。因此,找到一条准则,然后调用子项并将结果转换为一个数组。所以在控制器中,我说:

if params[:seeChildren]
      @guideline = Guideline.find(params[:seeChildren])
      @guidelines = Array.wrap(@guideline.children())

神奇的是,我的质疑有效。将此贴在此处,以便其他有类似问题的人能够找到真相。

我确实在我的问题中对其进行了定义,但这显然是错误的定义。不,你没有定义它。你在定义单数,并用复数来称呼每一个。
if params[:seeChildren]
      @guideline = Guideline.find(params[:seeChildren])
      @guidelines = Array.wrap(@guideline.children())