Ruby on rails 3 从Rails 3中的多个表中选择列

Ruby on rails 3 从Rails 3中的多个表中选择列,ruby-on-rails-3,activerecord,orm,Ruby On Rails 3,Activerecord,Orm,一般来说,我是ORM新手,在让Rails生成ok SQL时遇到了麻烦。我有两个表,消息和用户。基本上,我想要一个带有发送者的用户名的消息列表 如果: 我只从用户表中获得了一列(用户表中有许多不需要选择的列) 它使用了左连接(即使用户出于某种原因离开了,我也希望收到消息,我不想通过内部连接减慢速度) 我不需要在这段代码中提到外键的名称(我应该只需要在模型中设置它们,“不要重复我自己”,对吗?) 我设置了以下模型: class Message < ActiveRecord::Base

一般来说,我是ORM新手,在让Rails生成ok SQL时遇到了麻烦。我有两个表,消息和用户。基本上,我想要一个带有发送者的
用户名的消息列表

如果:

  • 我只从用户表中获得了一列(用户表中有许多不需要选择的列)

  • 它使用了左连接(即使用户出于某种原因离开了,我也希望收到消息,我不想通过内部连接减慢速度)

  • 我不需要在这段代码中提到外键的名称(我应该只需要在模型中设置它们,“不要重复我自己”,对吗?)

我设置了以下模型:

class Message < ActiveRecord::Base
  belongs_to :sender, :class_name => "User", :foreign_key => "from_user_id"
  belongs_to :recipient, :class_name => "User", :foreign_key => "to_user_id"
end


class User < ActiveRecord::Base
  has_many :sent_messages, :class_name => "Message", :foreign_key => "from_user_id"
  has_many :received_messages, :class_name => "Message", :foreign_key => "to_user_id"
end
class消息“User”,:foreign\u key=>“from\u User\u id”
属于收件人::类名称=>“用户”;:外部密钥=>“属于用户id”
结束
类用户“Message”,:foreign\u key=>“from\u user\u id”
有多条:收到的消息,:class\u name=>“Message”,:foreign\u key=>“to\u user\u id”
结束

我真的很想喜欢ORM,但它似乎很容易达到你只需要自己编写查询的地步。

也许类似的东西可以做到这一点(在消息模型中):

问题是,除非此连接按预期工作,否则您需要使用SQL代码段指定joins(),然后includes()可能不会使用此连接,而是总共使用N+1个查询

default_scope select("messages.*, users.name as user_name").joins(:user).includes(:user)