Rails 5: объединение двух моделей ActiveRecord - PullRequest
0 голосов
/ 17 февраля 2019

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

My Users Controller:

@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 %>

Но это дает мне все резервирования, сделанные пользователем, я хочу только первое резервирование отпользователь и, следовательно, только одна таблица для каждого пользователя.

Можно ли добиться этого в представлении или мне нужно внести некоторые изменения в моем контроллере?

1 Ответ

0 голосов
/ 17 февраля 2019

, поскольку вам нужно только предварительное резервирование от каждого пользователя, приведенные ниже пользовательские ассоциации (has_one) могут помочь вашему запросу в контроллере

User.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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...