我是RoR的新手,非常感谢任何帮助:)
我有一个基本的脚手架CRUD应用程序来添加客户。
我试图通过first_name或last_name字段进行搜索。
我得到的错误是:
Clientes#find中的NoMethodError 当你没想到它时,你有一个零对象! 您可能期望一个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函数是:
# 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(适用于2010-05-02 22:14:29的127.0.0.1)[GET] [4; 36; 1mCliente负载(1.0ms)[0m [0; 1mSELECT * FROM“clientes”[0m] 在布局/客户中渲染模板 渲染客户/索引 完成28ms(查看:19,DB:1)| 200 OK [http://localhost/clientes]
处理ClientesController #src(适用于2010-05-02 22:14:36的127.0.0.1)[POST] 参数:{“search_string”=&gt;“eduardo calvachi”,“commit”=&gt;“搜索”,“authenticity_token”=&gt;“mSaFeUAWdIWBNPkTufX2hdx7NaMaGfLSp1h78nTB7Ns =”}
NoMethodError(当你没想到它时,你有一个零对象! 您可能期望ActiveRecord :: Base的实例。 在评估nil。[]时发生错误: app / controllers / clientes_controller.rb:88:在`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”=&gt;“eduardo calvachi”,“commit”=&gt;“搜索”,“authenticity_token”=&gt;“mSaFeUAWdIWBNPkTufX2hdx7NaMaGfLSp1h78nTB7Ns =”}
NoMethodError(当你没想到它时,你有一个零对象! 您可能期望ActiveRecord :: Base的实例。 在评估nil。[]时发生错误: app / controllers / clientes_controller.rb:88:在`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”=&gt;“eduardo calvachi”,“commit”=&gt;“搜索”,“authenticity_token”=&gt;“mSaFeUAWdIWBNPkTufX2hdx7NaMaGfLSp1h78nTB7Ns =”}
NoMethodError(当你没想到它时,你有一个零对象! 您可能期望ActiveRecord :: Base的实例。 在评估nil。[]时发生错误: app / controllers / clientes_controller.rb:88:在`src'
渲染救援/ _trace(39.0ms) 渲染救援/ _request_and_response(0.0ms) 渲染救援/布局(internal_server_error)
答案 0 :(得分:0)
@clientes
显然是nil
元素。
尝试将代码放入索引中,因为您可能将其作为restful
资源使用,或者find
是保留名称。
将控制器中的定义更改为以下内容:
def index
params = params[:search_string]
@clientes = Cliente.find(:all, :conditions=>["client_name = ? OR client_lastname = ?",params, params)
end
BTW - 确保您在索引视图中有旧的查找视图。