Как мне реализовать ассоциации в searchkick - PullRequest
0 голосов
/ 05 февраля 2020

Во-первых, пример, который я прочитал в документах, показывает объявление связанной модели как единственного числа: address, но если я получаю сообщение об ошибке, ассоциация с именем 'address' не найдена в User; Если я поменяю его на множественное число: адреса, то следующая проблема, с которой я столкнулся, заключается в том, что ассоциация не работает в представлениях undefined метод `страна 'для ... Почему я объявляю ассоциацию множественным числом и как я могу сделать ассоциацию доступной в представление

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>

1 Ответ

0 голосов
/ 06 февраля 2020
  • В контроллере выполните следующие действия: @user = User.includes(:addresses).where(your_query), чтобы сделать ассоциацию доступной .

  • И да, ассоциации has_many должно быть во множественном числе: "User has_one :life" и "User has_many :passions"; имеет ли это смысл?

  • И, наконец, ваша ошибка: where возвращает массив, потому что вы запросили: «принесите мне все записи, которые удовлетворяют этому условию». find, с другой стороны, вернет 1 указанную c запись, поскольку она ожидает уникальный атрибут или вернет первую запись, соответствующую этому атрибуту.

  • Что вам нужно сделать:

    Вы должны либо сделать это (если вы абсолютно уверены, что получите 1 такую ​​запись, или вам нужен только один из этого типа):

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

    ИЛИ

    Если вам нужно go через весь результирующий массив, тогда:

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

Счастливое обучение:)

...