Как отобразить экземпляры одного класса в представлении другого класса?
Подскажите, пожалуйста, как вывести список заказов 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.
- Добавить код в 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>
Второй способ:
- Добавить в companies controller @orders:
def show
@company = Company.find(params[:id])
@orders = Order.joins(user: :company).where(companies: { id: params[:id] })
end
- Добавить код в 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>