我如何在 searchkick 中实现关联

How do I implement associations in searchkick

首先,我在文档中阅读的示例显示将关联模型声明为单数 :address,但如果这样做,我会收到错误 Association named 'address' was not found on User;如果我将它更改为复数:addresses,那么我遇到的下一个问题是关联在视图未定义方法“国家/地区”中不起作用... 为什么我要将关联声明为复数以及如何使关联在视图中可用

User.rb:

class User < ActiveRecord::Base
searchkick  word_middle: ['full_name', 'description', 'interests'] 
has_many :addresses
scope :search_import, -> { includes(:addresses) }

search.html.erb:


 <% @users.each do |u| %>
  <li> 
    <%= link_to "#{u.first_name} #{u.middle_name} #{u.last_name}", page_path(name: u.name) %>

        <% @ua=u.addresses.where("current=?", true) %>
        <% if @ua.country=="US" %>
            <%= @ua.city %>, <%= @ua.state %> <%= ISO3166::Country.find_country_by_alpha2(@ua.country) %>
        <% else %>
            <%= @ua.city %>, <%= ISO3166::Country.find_country_by_alpha2(@ua.country) %>
        <% end %>
  </li>
 <% end %>
</ul>

  • 在控制器中,执行此操作:@user = User.includes(:addresses).where(your_query)使关联随时在视图中可用。

  • 是的 has_many 关联必须是复数:“User has_one :life”和“User has_many :passions”;是否有意义?

  • 最后你的错误: where returns 一个数组,因为你查询了:"bring me all records which fulfill this condition"。另一方面,find 将带回 1 条特定记录,因为它需要唯一属性或带回与该属性匹配的第一条记录。

  • 您需要做的事情:

    你应该这样做(如果你确定你会得到 1 这样的记录,或者你只需​​要那种类型的一种):

    <% @ua=u.addresses.where("current=?", true).first %>

    如果您需要遍历所有结果数组,则:

  <% @ua=u.addresses.where("current=?", true) %>
  <% @ua.each do |ua| %>
    # Your code for each ua instead of @ua.
  <% end %>

快乐学习:)