我有一个正常运作的自我加入关系,其中指南有很多孩子,属于父母。我需要让用户通过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 %>
(应用程序/视图/ index.html.erb)
在控制器中我说
if params[:seeChildren]
@guideline = Guideline.find(params[:seeChildren])
@guideline.children
(应用程序/控制器/ guidelines_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)
有什么想法吗?我很感激帮助。我发布了几个问题并且通常因为我没有提供足够的信息而失败,所以如果你需要查看另一个文件,请告诉我。
答案 0 :(得分:0)
您可能忘记在控制器中定义@guidlines
,这可以解释为什么在尝试在 @上呼叫undefined method 'each' for nil:NilClass
时收到.each
错误消息的原因<% @guidelines.each do |guideline| %>
答案 1 :(得分:0)
是的,和JBMILGROm说的一样,你忘记在控制器中提到@guidelines。
答案 2 :(得分:0)
除了在指南上使用错误的单数/复数外,我发现我需要将一个对象转换为数组。因此,找到一个指南,然后调用子项并将结果转换为数组。所以在控制器中我说:
if params[:seeChildren]
@guideline = Guideline.find(params[:seeChildren])
@guidelines = Array.wrap(@guideline.children())
和魔术,我的查询有效。将此发布在此处,以便其他有类似问题的人可以找到真相。