无法在轨道上获得简单的红宝石搜索工作:/

时间:2010-05-03 02:01:24

标签: ruby-on-rails search

我是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)

1 个答案:

答案 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 - 确保您在索引视图中有旧的查找视图。