答えて

9

スコープを使用するより良いと簡単です。コントローラーで

scope :uniquely_named, group(:name) 

:モデル内

autocomplete :user, :name, :scopes => [:uniquely_named] 

この解決策は、より複雑なフィルタリングが容易に適用されることを可能にする:

モデル:

scope :uniquely_named, group(:name) 
scope :online, where(:online => true) 

共同ntroller:他の回答の

autocomplete :user, :name, :scopes => [:uniquely_named, :online] 

source

3

- ではなく、に表示されません - 'オートコンプリート'マクロは実際にはコントローラ内のアクションを定義するだけです。私は幸運を私のコントローラで「オートコンプリート」を使用して見送ると自分自身をアクションを実装...

def autocomplete_for_user_name 
    User.select('distinct name') 
end 

と思います。

2

私はこれを試してみてください。

class UbicationsController < ApplicationController 
    autocomplete :ubication, :name 

    def autocomplete_ubication_name 
    render json: Ubication.select("DISTINCT name as value").where("LOWER(name) like LOWER(?)", "%#{params[:term]}%") 
    end 
end 
1

なしMongoIDで動作しません。

私はこれを行うには、多くの回答のミックスを使用します。

class ProductsController < ApplicationController 
    autocomplete :product, :manufacturer 
    autocomplete :product, :model 

    def autocomplete_product_manufacturer 
    render_autocomplete(:manufacturer) 
    end 

    def autocomplete_product_model 
    render_autocomplete(:model) 
    end 

    def render_autocomplete(field) 
    render json: Product.where(field => /#{params[:term]}/i).where(domain: @domain).distinct(field) 
    end 
end 

これは、関係を使用していません。製造元とモデルは、製品モデルの文字列フィールドです。

お返事ありがとうございました。

0

Postgresqlの:

scope :uniquely_named, :select => 'distinct name' #In model 
    autocomplete :user, :name, :scopes => [:uniquely_named] #In controller