Как я могу запросить модель по ассоциации, но при этом получить доступ ко всем ассоциациям модели?

#ruby-on-rails #activerecord #ruby-on-rails-4 #associations

#ruby-on-rails #activerecord #ruby-on-rails-4 #ассоциации

Вопрос:

Чтобы получить результаты поиска, я запрашиваю с помощью

 Shop.all
.includes(:tags)
.where('tags.name ilike ?', "%#{query}%")
.references(:tags)
  

Затем отобразите его с помощью

 <%= render :partial => "shop_card", :collection => @shops, :as => :shop %>
  

и в частичном

 <% shop.tags.each do |tag| %>
  <%= tag.name  %>
<% end %>
  

Магазины и теги имеют отношение has_and_belongs_to_many .

Когда я делаю это, в частичном представлении отображается только тег, который я искал, вместо отображения всех тегов для этого магазина. Я не могу понять, почему. Как мне получить доступ ко всем тегам для этого магазина?

Комментарии:

1. shops = Shop.all.includes(:tags) это даст вам все теги shops.first.tags , которые дадут вам теги для первого магазина и цикл использования для всех

2. @G.B Но я не могу понять, почему запрос влияет на мой доступ к ассоциации. Как только я выполню запрос, который приведет меня к магазину, разве я не должен быть в состоянии выполнить shop.tags и получить все теги этого магазина, независимо от того, каким был запрос?

Ответ №1:

Добавьте условие для сценария поиска…

 @shops = Shop
.includes(:tags)
.references(:tags)

if query
   @shops = @shops.where('tags.name ilike ?', "%#{query}%")
  

Комментарии:

1. Спасибо за ваш ответ. У меня есть запрос внутри инструкции if query.present? . Это не связано с проблемой доступа к ассоциациям магазина.

2. Когда query=»», условие where вернет только теги, содержащие «». Это будет пусто.. Если вам нужно больше разъяснений, пожалуйста, добавьте полный код этого метода контроллера

3. Но почему запрос влияет на мою способность получать доступ к тегам магазина? Если я выполняю запрос, который выдает мне магазин, не должен ли я тогда иметь возможность выполнить shop.tags и получить все теги для этого магазина, независимо от того, из какого запроса я получил магазин?

4. Вы выполняете запрос внутри таблицы тегов. Тогда как вы можете увидеть теги, которые не соответствуют запросу. Я думаю, вы намерены запросить внутри таблицы shops..