0

我正在尝试使用轮胎宝石进行排序搜索,但我总是收到此错误:

解析失败 [未找到 [职业] 的映射以便排序]]

我的代码有什么问题?以下是我的用户模型

class User
  include Mongoid::Document
  include Mongoid::Timestamps
  include Tire::Model::Search
  include Tire::Model::Callbacks

  belongs_to :occupation

  field :name, :type => String, :default => ""
  field :email, :type => String, :default => ""
  field :kind, :type => String, :default => ""

  def to_indexed_json
    { id: id,
      name: name,
      email: email,
      kind: kind,
      occupation: occupation.try(:name),
      created_at: created_at,
      updated_at: updated_at
    }.to_json
  end

  mapping do
    indexes :id, :type => 'integer'
    indexes :name, :type => 'String'
    indexes :email, :type => 'String'
    indexes :kind, :type => 'String'
    indexes :occupation, :type => 'String'
    indexes :created_at, :type => 'Date'
    indexes :updated_at, :type => 'Date'
  end

  def self.search q, params={}
    tire.search page: (params[:page] || 1)  do |search|
      search.query do |query|
        query.string q
      end
      search.sort do |sort|
        sort_column = params[:sort] || 'occupation'
        sort_direction = params[:direction] || 'asc'
        sort.by(sort_column.to_sym, sort_direction)
      end
    end
  end
end
4

1 回答 1

0

你能试试这个吗?我猜您是在 to_indexed_json 中发送职业名称,并且您正在尝试对整个职业模型进行排序。

class User
  include Mongoid::Document
  include Mongoid::Timestamps
  include Tire::Model::Search
  include Tire::Model::Callbacks

  belongs_to :occupation

  field :name, :type => String, :default => ""
  field :email, :type => String, :default => ""
  field :kind, :type => String, :default => ""

  def to_indexed_json
    { id: id,
      name: name,
      email: email,
      kind: kind,
      occupation: occupation.try(:name),
      created_at: created_at,
      updated_at: updated_at
    }.to_json
  end

  mapping do
    indexes :id, :type => 'integer'
    indexes :name, :type => 'String'
    indexes :email, :type => 'String'
    indexes :kind, :type => 'String'
    indexes :occupation, :type => 'object' do
        indexes :name, :type => 'String'
    end
    indexes :created_at, :type => 'Date'
    indexes :updated_at, :type => 'Date'
  end

  def self.search q, params={}
    tire.search page: (params[:page] || 1)  do |search|
      search.query do |query|
        query.string q
      end
      search.sort do |sort|
        sort_column = params[:sort] || 'occupation.name'
        sort_direction = params[:direction] || 'asc'
        sort.by(sort_column, sort_direction)
      end
    end
  end
end
于 2013-01-11T08:05:42.480 回答