我有两个模型 Client 和 Project 。
class Project < ApplicationRecord
belongs_to :client
end
class Client < ApplicationRecord
has_many :projects
end
我在 clients 和 projects 表中具有以下记录:
我想显示一个带有客户名称的项目记录。我需要在控制器中进行什么查询?
class ProjectsController < ApplicationController
def index
@projects = #your query here
end
end
答案 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的答案,如果要在数据库级别上进行操作,则可以编写以上查询