从Rails 3中的几个表中选择列

时间:2011-11-07 22:37:46

标签: ruby-on-rails-3 activerecord orm

我一般都是ORM的新手,我无法让Rails生成ok SQL。我有两个表,消息和用户。基本上,我想要一个包含user_name发件人的邮件列表。

如果:

会很棒
  • 我只从用户表中获得了一列(用户表中包含许多不需要选择的列)

  • 它使用LEFT JOIN(即使用户由于某种原因而消失,我想要消息,我也不想通过INNER JOIN减慢速度)

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

我已经设置了这些模型:

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

我真的想要喜欢ORM,但似乎很容易达到你必须自己编写查询的程度。

1 个答案:

答案 0 :(得分:0)

也许这样的事情会起作用(在消息模型中):

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

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