与弹性搜索关联的数据库

时间:2014-06-29 13:37:07

标签: ruby-on-rails ruby ruby-on-rails-4 elasticsearch

刚安装了elasticsearch gem并进行了配置。

我在正确的模型上进行了搜索。但是在视图中我还包含来自相关数据库模型的数据,名为公司,它给了我这个错误:

undefined method `company' for #<Elasticsearch::Model::Response::Result:0x000001032d67d0>

如果我尝试在视图中删除与该关联数据库相关的所有内容,则搜索效果很好。所以这只是解决这个问题的问题。

application.rb 的模型如下所示:

require 'elasticsearch/model'
class Application < ActiveRecord::Base
  belongs_to :company
  has_many :answers
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
.... 

我上课的地方( searching_controller.rb

def index
    @application = Application.search(params[:query])
end

最后是index.html.erb文件:

<%= form_tag search_startup_path, method: :get do %>
 <p>
  <%= text_field_tag :query, params[:query] %>
  <%= submit_tag "Search", name: nil %>
 </p>
<% end %> 

<hr>
<% @application.each do |f| %>

 <h2><%= f.company.name %> is looking for a <%= f.work_type %></h2>
   <%= image_tag f.company.avatar(:medium), alt:"#{f.company.name.pluralize} logo", height:"100", width:"100" %>
   <p><%= link_to "Visit #{f.company.name.pluralize} website", f.company.website, rel: "nofollow" %></p>
   <p>Company located in: <%= f.company.city %>, <%= f.company.country %></p>
   <p>Required to be on location: <%= f.location %> </p>

<% end %>

因此,在没有elasticsearch的情况下查看关联的公司数据库工作正常。所以那里没有错误,我只是不确定如何启用elasticsearch来查看屁股。模型

1 个答案:

答案 0 :(得分:1)

新弹性搜索库仅返回elasticsearch中的数据并将其包装到Hashie::Mash gem中。所以你只使用Elasticsearch::Model::Response::Result课程。如果您想使用ActiveRecord,您的索引操作必须如下所示:

def index
  @application = Application.search(params[:query]).records
end

records方法返回ActiveRecord模型的集合,您可以在github上找到更多信息,请阅读https://github.com/elasticsearch/elasticsearch-rails/tree/master/elasticsearch-model#search-results-as-database-records