繁体   English   中英

内部加入Rails活动记录

[英]Inner joins with Rails active record

我是Rails的新手,一直在研究各种书籍和教程。 我有一个简单的(ish)设置,其中包含以下模型和模式。 我正在尝试获取用户详细信息以及usergroup_membership ID。 我想我已经为要实现的目标正确设置了模型(关系按它们显示的样子出现,用户通过usergroup_memberships属于组-没什么花哨的)。 使用“ rails db”,我可以使用原始SQL来获取所需的记录集,但是我不知道如何以Rails的方式进行操作。

我的基础课

Class User
has_many :usergroup_memberships
has_many :usergroups, :through => :usergroup_memberships

Class Usergroup
has_many :usergroup_memberships, :dependent => :destroy
has_many :users, :through => :usergroup_memberships

Class UsergroupMembership
belongs_to :usergroup
belongs_to :user

SQL有效

SELECT users.*, usergroup_memberships.id 
FROM users
LEFT JOIN usergroup_memberships ON usergroup_memberships.user_id = users.id 
WHERE usergroup_memberships.usergroup_id = 1;

上面的SQL很好,并返回记录的末尾带有连接的usergroup_memberships.id的记录集。 非常感谢任何有关如何通过Rails解决问题的帮助或文档。

您可以在所谓的Rails控制台中进行类似的实验。

如果您在apps目录中,则可以使用以下命令启动Rails控制台:

rails c

等待提示! 首先,您需要获得一个用户:

u = User.first

然后,您可以轻松获得用户组:

g = u.usergroups

您会发现自己总是在控制台中进行测试,可以在您的应用程序中使用这些东西,例如:获取第一个用户的用户组:

User.first.usergoups

但是,让我推荐gem: pry 通过使用该gem(只需将其放入Gemfile中),您可以在应用程序内部创建断点以进行调试,这将导致创建Rails控制台。 例如,在控制器方法中,您只能说:

binding.pry

执行此行后,rails服务器将切换到调试模式并在断点处暂停,您将能够看到该范围中定义的所有变量,方法。

我发现了一些对我来说很好的东西:

@blah = Usergroup.find(groupID).usergroup_memberships.includes(:user)

然后,访问用户详细信息:

@blah[i].user.email

(并感谢您的评论-@Baldrick-我认为我的模型有点破损/不合常规,在下一个项目中需要牢记)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM