Rails Geocoder - 仍在学习

时间:2011-10-01 12:36:02

标签: ruby-on-rails

我确信这是一个简单的问题,因为我没有完全理解Rails中的位是如何组合在一起的......

我已经关注了rails cast,但我在将其应用到我的应用中时遇到了麻烦(我让它独立工作)。

我得到的错误是

  

未定义的方法`nearbys'

这是我得到的: user.rb

  geocoded_by :full_address   
  after_validation :geocode

  def full_address
    [address1, address2, address3, city, country, postcode].compact.join(', ')   
  end

users_controller.rb

def index
    @title = "All users"

    if params[:search].present?
      @users = User.near(params[:search], 50, :order => :distance)
    else
      @users = User.all
    end
end

index.html.erb

<h3>Nearby locations</h3>
<ul>
<% for user in @users.nearbys(10) %>
  <li><%= link_to user.address1, user %> (<%= user.distance.round(2) %> miles)</li>
<% end %>
</ul>

_sidebar.html.erb

            <%= form_tag users_path, :method => :get do %>
                <p>
                <%= text_field_tag :search, params[:search] %>
                <%= submit_tag "Search Near", :name => nil %>
                </p>
            <% end %>

由于

如果我注释掉.nearbys

<% for user in @users#.nearbys(10) %>
  <li><%= link_to user.latitude, user %> (<%= user.distance.round(2) %> miles)</li>
<% end %>

搜索有效。这可能是安装地理编码器的问题吗?

1 个答案:

答案 0 :(得分:4)

函数nearbys是模型上的函数,而不是模型集合上的函数。变量@users包含User个模型的集合。您需要在单个模型实例上调用该函数,例如@users中的每个用户。

举个例子,但不确定你是否真的想要这个:

<% @users.each do |user| %>
  <% user.nearbys(10).each do |near_user| %>
    <li><%= link_to near_user.latitude, near_user %> (<%= near_user.distance.round(2) %> miles)</li>
  <% end %>
<% end %>

(请注意,我还更改了for user in @users以使用@users.each do |user|,这更像是“ Rubyish ”。)