В настоящее время я пытаюсь отобразить пользователей, приглашенных текущим пользователем, и я также хочу отобразить последнее сделанное бронирование, если они его сделали.
Мой контроллер пользователей:
@users = User.where(invited_by_id: current_user.id)
Мой взгляд:
<% @users.each do |user| %>
<%= user.fullname %> #Works
<%= user.invited_by.fullname %> #Works
<% end %>
Что я уже пробовал:
<% @users.each do |user| %>
<% user.reservations.each do |reservation| %>
<%= reservation.user.fullname %> #Works
<%= reservation.price %> # Works
<% end %>
<% end %>
Но это дает мне все бронирования, сделанные пользователем, мне нужно только первое бронирование от пользователя и, следовательно, только одна таблица для каждого пользователя.
Можно ли добиться этого в представлении или мне нужно внести некоторые изменения в мой контроллер?





поскольку вам нужно только первое бронирование от каждого пользователя, приведенные ниже пользовательские ассоциации (has_one) могут помочь вашему запросу в контроллере
Пользователь.rb
class User < ActiveRecord::Base
has_many :reservations
has_one :first_reservation, -> { order('created_at ASC')}, class_name: "Reservation"
end
Пользовательский контроллер:
@users = User.where(invited_by_id: current_user.id).preload(:first_reservation)
# preload will make sure load the reservation record as well to prevent n+1
ваше представление объединило пользователя и первое резервирование, поскольку вы уже настроили has_one, вы можете вызвать user.first_reservation
<% @users.each do |user| %>
<%= user.fullname %>
<%= user.first_reservation.price %>
<% end %>