如何在Rails中使用联接查询?

时间:2018-12-10 07:34:24

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-5

我有两个模型 Client Project

模型

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

我在 clients projects 表中具有以下记录:

enter image description here

enter image description here

我想显示一个带有客户名称的项目记录。我需要在控制器中进行什么查询?

控制器

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

2 个答案:

答案 0 :(得分:3)

我认为没有理由使用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 %>

答案 1 :(得分:0)

我假设您的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的答案,如果要在数据库级别上进行操作,则可以编写以上查询