基于模型的多个属性自动完成

时间:2016-05-18 03:50:55

标签: ruby-on-rails jquery-ui

在我创建新Event的表单中,我根据this railcastVenue创建了一个自动填写字段。但这样只有在输入场地名称时才有效。如何在输入地址时使相同的字段也起作用,在GoogleMaps上的方式如何?

模型/ event.rb

  def find_venue
    venue.try(:name)
  end

  def find_venue=(name)
    self.venue = Venue.find_or_create_by_name(name) if name.present?
  end

的application.js

//= require jquery-ui

Javascript角/ events.js.coffee:

jQuery ->
  $('#event_find_venue').autocomplete
    source: $('#event_find_venue').data('autocomplete-source')

new.html.erb:

  <%= f.text_field :find_venue, data: {autocomplete_source: Venue.order(:name).map(&:name)} %>

venues_controller.rb

  def index
    @venues = Venue.order(:name).where("name like ?", "%#{params[:term]}%")
    render json: @venues.map(&:name)
  end

1 个答案:

答案 0 :(得分:0)

您必须使用多个OR条件来匹配每个属性:

Venue.order(:name).where("name like ? OR address like ?", "%#{params[:term]}%", "%#{params[:address]}%")

如果您不关心区分大小写,可能还需要考虑使用ILIKE代替LIKE