Как использовать запрос соединения в рельсах? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть две модели Клиент и Проект .

Модели

class Project < ApplicationRecord
    belongs_to :client
end
class Client < ApplicationRecord
    has_many :projects
end

У меня есть следующие записи в клиентах и проекты таблицы:

enter image description here

enter image description here

Iхотите отобразить запись проекта с именем клиента.Какой запрос мне нужен в моем контроллере?

Контроллер

class ProjectsController < ApplicationController
  def index
    @projects = #your query here
  end
end

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Не вижу смысла использовать запрос JOIN.Но я бы предложил использовать includes, чтобы избежать N + 1 запросов.

# in your controller
@projects = Project.includes(:client)

# in your view (simplified – without html tags)
<% @projects.each do |project| %>
  <%= project.name %>
  <%= project.client.client_name %>
<% end %>
0 голосов
/ 10 декабря 2018

Я предполагаю, что ваши версии rails> 5

class ProjectsController < ApplicationController
    def index
        @projects = Project.left_outer_joins(:client).select("projects.*, clients.name as client_name").group("projects.id")
    end
end

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

...