【发布时间】:2011-02-14 21:28:26
【问题描述】:
我是 RoR 的新手,任何帮助将不胜感激 :)
我有一个基本的脚手架 CRUD 应用程序来添加客户。
我正在尝试按 first_name 或 last_name 字段进行搜索。
我得到的错误是:
客户端中的 NoMethodError#find 当你没想到时,你有一个 nil 对象! 您可能期望有一个 Array 的实例。 评估 nil.each 时发生错误
提取的源代码(第 9 行附近):
6: <th>Apellido</th>
7: </tr>
8:
9: <% for cliente in @clientes %>
10: <tr>
11: <td><%=h cliente.client_name %></td>
12: <td><%=h cliente.client_lastname %></td>
应用程序跟踪
C:/Rails/clientes/app/views/clientes/find.html.erb:9:in `_run_erb_app47views47clientes47find46html46erb'
我在 controllers/clientes_controlee.rb 中的查找函数是:
# Find
def find
@cliente = Cliente.find(:all,
:conditions=>["client_name = ? OR client_lastname = ?", params[:search_string], params[:search_string]])
end
我的视图/布局clientes.html.erb 表单代码片段是:
<span style="text-align: right">
<% form_tag "/clientes/find" do %>
<%= text_field_tag :search_string %>
<%= submit_tag "Search" %>
<% end %>
</span>
我在views/clientes/find.html.erb中创建的搜索模板:
<h1>Listing clientes for <%= params[:search_string] %></h1>
<table>
<tr>
<th>Nombre</th>
<th>Apellido</th>
</tr>
<% for cliente in @clientes %>
<tr>
<td><%=h cliente.client_name %></td>
<td><%=h cliente.client_lastname %></td>
<td><%= link_to 'Mostrar', cliente %></td>
<td><%= link_to 'Editar', edit_cliente_path(cliente) %></td>
<td><%= link_to 'Eliminar', cliente, :confirm =>'Estas Seguro de que desear eliminar a este te cliente?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'Atras', clientes_path %>
开发日志
处理 ClientesController#index (for 127.0.0.1 at 2010-05-02 22:14:29) [GET] [4;36;1mCliente 负载 (1.0ms)[0m [0;1mSELECT * FROM "clientes" [0m 在布局/客户端中渲染模板 渲染客户端/索引 在 28 毫秒内完成(查看:19,DB:1)| 200 OK [http://localhost/clientes]
处理 ClientesController#src(2010-05-02 22:14:36 为 127.0.0.1)[POST] 参数:{"search_string"=>"eduardo calvachi", "commit"=>"Search", "authenticity_token"=>"mSaFeUAWdIWBNPkTufX2hdx7NaMaGfLSp1h78nTB7Ns="}
NoMethodError (你有一个 nil 对象,但你没想到它! 您可能期望 ActiveRecord::Base 的实例。 评估 nil.[]) 时发生错误: app/controllers/clientes_controller.rb:88:in `src'
渲染救援/_trace (48.0ms) 渲染救援/_request_and_response (0.0ms) 渲染救援/布局(internal_server_error)
处理 ClientesController#src(2010-05-02 22:20:28 为 127.0.0.1)[POST] 参数:{"search_string"=>"eduardo calvachi", "commit"=>"Search", "authenticity_token"=>"mSaFeUAWdIWBNPkTufX2hdx7NaMaGfLSp1h78nTB7Ns="}
NoMethodError (你有一个 nil 对象,但你没想到它! 您可能期望 ActiveRecord::Base 的实例。 评估 nil.[]) 时发生错误: app/controllers/clientes_controller.rb:88:in `src'
渲染救援/_trace (92.0ms) 渲染救援/_request_and_response (1.0ms) 渲染救援/布局(internal_server_error)
处理 ClientesController#src(2010-05-02 22:36:12 为 127.0.0.1)[POST] 参数:{"search_string"=>"eduardo calvachi", "commit"=>"Search", "authenticity_token"=>"mSaFeUAWdIWBNPkTufX2hdx7NaMaGfLSp1h78nTB7Ns="}
NoMethodError (你有一个 nil 对象,但你没想到它! 您可能期望 ActiveRecord::Base 的实例。 评估 nil.[]) 时发生错误: app/controllers/clientes_controller.rb:88:in `src'
渲染救援/_trace (39.0ms) 渲染救援/_request_and_response (0.0ms) 渲染救援/布局(internal_server_error)
【问题讨论】:
-
您的 routes.rb 文件是否有此操作的定义?
-
在您的
find方法中,@cliente 应该是 @clientes... -
嗨 Lowgain,我只有默认路由: ActionController::Routing::Routes.draw do |map| map.resources :clientes 和 map.connect ':controller/:action/:id' 和 map.connect ':controller/:action/:id.:format'
-
clientes controller的第 88 行你有什么? -
稍微跑题了——如果你只用英语开发,然后使用 Rails 国际化模块 (i18n) 翻译成其他语言,你会遇到更少的麻烦。
标签: ruby-on-rails search