Pergunta

Eu tenho um modelo project em meu aplicativo Rails 3.1 e quero usar o Solr para fazer uma pesquisa nele.

Eu defini a pesquisa assim:

  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

O project-nr, em meu modelo chamado apenas nr, tipo integer, é a referência mais usada para encontrar um projeto.

Agora, além de ter um formulário de pesquisa, eu ainda quero meus projetos ordenados pelo nr quando nenhuma pesquisa foi realizada, mas isso não funciona - meu projeto parece estar em uma ordem totalmente aleatória. O código da minha ação de índice ProjectsController se parece com este:

  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

Mas quando visito myapp / projects, recebo um

Sunspot::UnrecognizedFieldError in ProjectsController#index

No field configured for Project with name 'nr'

erro ...

todas as ideias que preciso fazer para pedir pelo nr.?

obrigado

Foi útil?

Solução

Ok, resolvi transformando o campo nr em um número inteiro em meu pesquisável:

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

Agora consegui fazer o pedido de maneira adequada, mas não consegui mais realizar uma pesquisa de texto no project_nr. Então, adicionei um atributo virtual name_number ao meu modelo Project e, em vez disso, pesquisei neste campo.

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

Agora eu tenho pedidos e pesquisas no lugar ... Se houver outras / melhores ideias, continue vindo!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top