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

Подскажите, пожалуйста, как вывести список заказов orders компании company при переходе из общего списка компаний непосредственно в ее профиль? А именно во views/companies/show.html.erb

Строго не судите, в RoR только вкатываюсь. Спасибо за понимание :)

Пример рабочего sql запроса с компанией id=305:

    select o.id
    from orders as o
    inner join users as u ON o.user_id = u.id
    inner join companies as c on c.id = u.company_id
    where c.id = 305

models/user.rb:

class User < ApplicationRecord  

  belongs_to :company
  has_many :orders

end

models/order.rb

class Order < ApplicationRecord  

  belongs_to :user
  
end

models/company.rb:

class Company < ApplicationRecord  

  has_many :users

end

users_controller.rb:

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
  end

  def index
    @users = User.paginate(page: params[:page]) 
  end   
  
end

orders_controller.rb:

class OrdersController < ApplicationController

  def show
    @orders = Order.find(params[:id])    
  end
    
  def index
    @orders = Order.paginate(page: params[:page]) 
  end 

end

companies_controller.rb

class CompaniesController < ApplicationController

  def show
    @company = Company.find(params[:id]) 
  end
    
  def index
    @companies = Company.paginate(page: params[:page]) 
  end 

end

views/companies/index.html.erb:

      <!DOCTYPE html>
      <html>
      <%= will_paginate %>
      <h1>Company list</h1>
        <ul class='companies'>
          <% @companies.each do |company| %>
            <li>
              <%= link_to company.full_name, company %> 
            </li>
          <% end %> 
        </ul>
      <%= will_paginate %>
      <html>

views/companies/show.html.erb:


      <!DOCTYPE html>
      <html>
      <div>id: <%= @company.id %></div>
      <div>Register date: <%= @company.created_at %></div>
      <div>Name: <%= @company.full_name %></div>
      <html>

В консоли запрос работает:

orders = Order.joins(user: :company).where(companies: { id: 305 }) 

Ответы (1 шт):

Автор решения: Ilay

Первый способ:

1.Добавить связь в models/company.rb:


    class Company < ApplicationRecord  
    
      has_many :users
      has_many :orders, through: :users
    
    end

Вызов @company.orders получит список заказов, связанных с @company.

  1. Добавить код в views/companies/show.html.erb:
      <div>
      <ul>
      Order list of company:
        <% @company.orders.each do |order| %>
          <li>
          order <%= link_to order.id, order %>
          </li> 
        <% end %>
      </ul>
      </div>

Второй способ:

  1. Добавить в companies controller @orders:
def show
    @company = Company.find(params[:id]) 
    @orders = Order.joins(user: :company).where(companies: { id: params[:id] })
  end
  1. Добавить код в views/companies/show.html.erb:

    <div>
    <ul>
    Order list of company:
      <% @orders.each do |order| %>
        <li>
          <%= link_to order.id, order %> 
        </li>
      <% end %>
    </ul>
    </div>

→ Ссылка