我一般都是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,但似乎很容易达到你必须自己编写查询的程度。
答案 0 :(得分:0)
也许这样的事情会起作用(在消息模型中):
default_scope select("messages.*, users.name as user_name").joins(:user).includes(:user)
问题是,除非此连接按预期工作,否则您需要使用SQL片段指定连接(),然后includes()可能不会使用此连接,而是使用N + 1查询总