1

我正在使用 Rails 搜索所需的结果。我有一个名为坐标的表,我想要一个搜索表单model.rb

class Coordinates<ActiveRecord::Base
  attr_accessible :city , :latitude, :longitude
end

坐标控制器.rb

class CoordinatesController<ApplicationController
  def show
    @coordinates=Coordinates.where("city = ?", params[:search]).all
  end
end

index.html.erb

<%= form_tag({controller: "coordinates", action: "show"}, method: "get") do  %>
<%= label_tag(:coordinates,"search for:") %>
<%= text_field_tag(:show) %>
<%= submit_tag("search") %>
<% end %>

搜索.html.erb

<%= form_for @coordinates.search do |coordinates| %>
  <ul>
    <li><%= coordinates.latitude %></li>
    <li><%= coordinates.longitude %></li>
    <li><%= coordinates.longitude %></li>
  </ul>
<% end %>

但我收到此错误:

[]:Array 的未定义方法“搜索”

.. 请帮忙

4

2 回答 2

2

首先,尝试将表单代码更改为index.html.erb

<%= form_tag({controller: "coordinates", action: "show"}, method: "get") do  %>
  <%= label_tag(:coordinates,"search for:") %>
  <%= text_field_tag(:show) %>
  <%= submit_tag("search") %>
<% end %>

至:

<%= form_tag({controller: "coordinates", action: "show"}, method: "get") do  %>
  <%= label_tag(:search,"search for:") %>
  <%= text_field_tag(:search) %>
  <%= submit_tag("Search") %>
<% end %>

这将使用文本字段的值填充 params[:search]。目前,您将查询作为参数 [:show] 传递。

接下来,尝试将搜索结果视图更改为:

<% @coordinates.each do |coordinates| %>
  <ul>
    <li><%= coordinates.latitude %></li>
    <li><%= coordinates.longitude %></li>
    <li><%= coordinates.longitude %></li>
  </ul>
<% end %>

这会遍历@coordinates控制器返回的集合。

于 2013-07-02T10:19:13.450 回答
1

从 nil:Nilclass 中的未定义方法“每个”行

您的数据库中似乎没有您要查找的城市的坐标

通话后 @coordinates=Coordinates.where("city = ?", params[:search]).all

检查@coordinates.nil?@coordinates.count查看是否是这种情况除此之外,在使用它之前检查它是一种更好的做法 - 这样你就可以按照你想要的方式处理它 - 以防你的数据库出现问题并且你不想要用户在生产中得到这样的错误

于 2013-07-02T17:54:56.423 回答