1

Rails 3.1 アプリケーションにprojectモデルがあり、Solr を使用して検索を実行したいと考えています。

次のように検索を定義しました。

  searchable do
    text :nr, :boost => 5  # nr is integer
    text :name, :boost => 5
    text :description, :boost => 2
    text :client do
      client.name
    end
    text :tasks do 
      tasks.map(&:name)
    end
  end

私のモデルでは project-nr は、ちょうど と呼ばれるnr整数型で、プロジェクトを見つけるために最もよく使われるリファレンスです。

検索フォームを使用する以外に、nr検索が実行されなかったときにプロジェクトを並べ替えたいのですが、これは機能しません。私のプロジェクトは完全にランダムな順序になっているようです。ProjectsController インデックス アクションのコードは次のようになります。

  def index
    @search = Project.search do
      fulltext params[:search]
      paginate :page => params[:page]
      order_by :nr, :desc
    end 

    @projects = @search.results

    #@projects = Project.active.visible.design.order("nr desc")
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @projects }
    end

しかし、次に myapp/projects にアクセスすると、

Sunspot::UnrecognizedFieldError in ProjectsController#index

No field configured for Project with name 'nr'

エラー...

nrで注文するために何をする必要があるかについてのアイデア。?

ありがとう

4

1 に答える 1

0

さて、nr検索可能なフィールドを整数に変換して解決しました。

searchable do
  integer :nr
  text :name, :boost => 5
  text :description, :boost => 2
  text :client do
    client.name
  end
  text :tasks do 
    tasks.map(&:name)
  end
end

これでうまく注文できましたが、project_nrでテキスト検索を実行できなくなりました。name_numberそこで、モデルに仮想属性を追加しProject、代わりにこのフィールドを検索しました。

  def name_number
    "#{self.nr} - #{self.name[0..24]}"
  end

今、私はその場で注文と検索をしています...他の/より良いアイデアがあれば、それらを続けてください!

于 2012-01-12T10:02:54.403 に答える