Javascript 如何使用Typeahead返回关联模型的记录?

Javascript 如何使用Typeahead返回关联模型的记录?,javascript,ruby-on-rails,json,typeahead.js,bloodhound,Javascript,Ruby On Rails,Json,Typeahead.js,Bloodhound,我正在使用gem,它是建立在和之上的。当用户在搜索栏中键入内容时,我使用它通过AJAX返回结果。现在,它搜索my modelProduct的实例,其中Product.name与搜索键匹配。这部分很好用 我要做的是返回一个关联的记录,以及原始结果。我的产品与商户有关系。例如,当我键入搜索键时,我希望结果也列出与每个产品关联的商户,如下所示: return "<div>" + product.name + product.merchant.name +</div>"; HT

我正在使用gem,它是建立在和之上的。当用户在搜索栏中键入内容时,我使用它通过AJAX返回结果。现在,它搜索my model
Product
的实例,其中
Product.name
与搜索键匹配。这部分很好用

我要做的是返回一个关联的记录,以及原始结果。我的
产品
商户
关系。例如,当我键入搜索键时,我希望结果也列出与每个产品关联的商户,如下所示:

return "<div>" + product.name + product.merchant.name +</div>";
HTML/JS

<%= form_tag products_path, :method => :get do %>
  <%= text_field_tag :search, params[:search], id:"typeahead" %>
    <%= image_tag("Go.png", type:"submit") %>
<% end %>


<script type="text/javascript">
  $(document).ready(function(){
    var bloodhound = new Bloodhound({
      datumTokenizer: function (d) {
        return Bloodhound.tokenizers.whitespace(d.value);
      },
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      remote: '/typeahead/%QUERY'
    });
    bloodhound.initialize();

    $('#typeahead').typeahead(null, {
      displayKey: function(product) {
        return "" + product.name + "";
      },
      source: bloodhound.ttAdapter(),
      templates: {
        suggestion: function (product) {
          var thing_url = "<%=root_url%>pages/"
          return "<div>" + product.name + </div>";
        }
      }
    });
  });
</script>
更新:

我尝试在查询中包括
商户

Product.includes(:merchants).where('name like ?', "%#{q}%")
然后尝试在结果中返回
商户名称

return "<div>" + product.name + product.merchant.name </div>";
返回“+product.name+product.merchant.name”;

但是添加
product.merchant.name
完全破坏了功能,所以现在我没有得到任何结果。

您可以将用户id作为类似于所有者id的内容添加到产品中,然后您还可以使用

@owner = User.find_by(id: @product.owner_id)

尝试像这样在查询中包含商家

Product.includes(:merchants).where('name like ?', "%#{q}%")

当呈现为JSON时,必须显式地告诉ActiveModel序列化程序包含关联的对象


render:json=>@products,:include=>{:merchant=>{:only=>:name}

但是
product
作为javascript变量返回。我如何将其传递到rails查询?我更新了我的问题。我试图在结果中打印merchant.name,但是
product.merchant.name
完全破坏了我的功能。我如何在结果中访问
merchant
?尝试获取第一个商户名称。我假设re是产品和商家之间的多对多关系。使用“product.merchants.first.name”而不是“product.merchant.name”不,商家有很多产品,产品属于商家。不幸的是,我无法查看错误,因为这都是通过ajax完成的,但使用hraynaud的代码,
product.merchant.name
最终起作用。
@owner = User.find_by(id: @product.owner_id)
Product.includes(:merchants).where('name like ?', "%#{q}%")