我的 Rails 应用程序中有两个模型,它们形成 one_to_many 关系。第一个模型 store 代表实体商店,并具有使用 'geocoder' gem 和地址列正确地理编码的纬度和经度列。商店有_many 产品。产品 has_one 商店。我想根据用户在搜索表单中输入的地址的接近程度返回产品索引。以下是我的代码的相关部分以及我实现搜索的尝试:
在 schema.rb 中:
create_table "products", force: true do |t|
t.string "title"
...
t.integer "store_id"
end
create_table "stores", force: true do |t|
...
t.string "business_address"
t.float "latitude"
t.float "longitude"
end
在 store.rb
class Store < ActiveRecord::Base
has_many :products
geocoded_by :business_address
after_validation :geocode, :if => :business_address_changed?
end
在产品.rb
class Offer < ActiveRecord::Base
belongs_to :store
end
在意见/产品/search.html.erb
...
<%= form_tag products_path, :method => 'get' do %>
<p>
Find products near<br />
<%= text_field_tag :custom_address, params[:custom_address] %><br />
</p>
<p>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
在 products_controller.rb 中
def index
@products = Store.near(params[:custom_address], 100, order: :distance, :select => "products.*")
end
上述索引方法生成一个
ActiveRecord::StatementInvalid in Products#index
错误
我不确定如何继续。显然,我使用 near 方法和 :select 的方式存在问题,但我无法理解它。我如何退回按距离排序的产品?
我使用 MySQL 作为数据库适配器;由于 SQLite 缺少三角函数,我听说过一些问题。