我是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处理此问题的帮助或文档都非常感谢。
答案 0 :(得分:1)
你可以在所谓的rails console中进行这样的实验。
如果您在apps目录中,可以使用以下命令启动rails控制台:
rails c
等待提示!首先,您需要获得一位用户:
u = User.first
然后,您可以轻松获得用户组:
g = u.usergroups
你会发现自己总是在控制台中测试这些东西,你可以在你的应用程序中使用它,例如:获得第一个用户用户组:
User.first.usergoups
但是,让我推荐一下gem:pry。通过使用这个gem(只需将它放入Gemfile),您可以在应用程序内部创建断点以进行调试,这将导致rails控制台。例如,在控制器方法中,您可以说:
binding.pry
当执行此行时,rails服务器将切换到调试模式并在断点处暂停,您可以看到该范围内定义的所有变量,方法。
答案 1 :(得分:0)
我找到了适合我的东西:
@blah = Usergroup.find(groupID).usergroup_memberships.includes(:user)
然后,要访问用户详细信息:
@blah[i].user.email
(感谢您的评论 - @Baldrick - 我认为我的模型有点破碎/非传统,下一个项目需要注意的事项。)