sql - ActiveRecord 连接

标签 sql ruby-on-rails activerecord rails-activerecord

好的,所以,如果我执行 User.joins(:session_users),我只会获得用户表的属性。

如何以 ActiveRecord 方式获取两个表的属性,即,不是 SQL?

编辑一个

好的,根据第一个答案,我正在尝试显示它。

所以,这是在Users Controller中写的方法

def blah 
  @users = User.includes(:session_users)
    @users.each do |user|
      user.session_users
    end
end 

然后我在用户 View 中有这个 blah.html.erb

 <%= @users.session_users %> 

这在路由部分:

  match "/users/blah" => "users#blah"

最佳答案

我认为您需要includes 而不是joins。参见 http://railscasts.com/episodes/181-include-vs-joins获取更多信息。这应该为两者获取列,

users = User.includes(:session_users)
users.each do |user|
  user.session_users
end

请注意,这仍然会执行 2 个 SQL 查询。

编辑

更新后的答案假定 user has_many :session_users

路线:

# config/routes.rb

get '/users/blah' => 'users#blah'

Controller :

# app/controllers/users_controller.rb

class UsersController < ApplicationController
  def blah
    @users = User.includes(:session_users)
  end
end

查看:

# app/views/users/blah.html.erb

<% @users.each do |user| %>

  <%= user.name %> // assumes user has a name attribute

  <% user.session_users.each do |session_user| %>
    <%= session_user.attributes %> // prints all the attributes
    <%= session_user.created_at %> // assumes the user has a created_at attribute
  <% end %>

<% end %>

关于sql - ActiveRecord 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900272/

相关文章:

sql - rails-5 activerecord postgresql-9.6 enable_neSTLoop 用于单个 sql 查询

ruby-on-rails - respond_to block 总是渲染 html

c# - SQL DataReader 在循环中缺少一行

sql - 分组依据选择仅返回具有更新行的组

ruby-on-rails - 如何严格检查 Ruby 数组是否仅包含某些值?

ruby-on-rails - 创建只有特定用户可以看到的表单。

ruby-on-rails - 如何使用 ActiveRecord 仅选择存储在 Postgres 中的部分 json

python - 确定 SQLite 中查询的执行时间

SQL Server 2008 查询为不存在的值置空

ruby-on-rails - 将旧的 Rspec 语法转换为新语法