我确信这是一个简单的问题,因为我没有完全理解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 %>
搜索有效。这可能是安装地理编码器的问题吗?
答案 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 ”。)