0

我是 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 解决此问题的任何帮助或文档。

4

2 回答 2

1

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

如果您在您的应用程序目录中,您可以使用以下命令启动 rails 控制台:

rails c

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

u = User.first

然后你可以很容易地获得用户组:

g = u.usergroups

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

User.first.usergoups

但是,让我推荐 gem: pry。通过使用此 gem(只需将其放入您的 Gemfile 中),您可以在应用程序中创建断点以进行调试,这将产生一个 rails 控制台。例如,在控制器方法中,您可以说:

binding.pry

当这一行被执行时,rails 服务器将切换到调试模式并在断点处停止,您可以看到该范围内定义的所有变量和方法。

于 2012-12-19T20:35:05.417 回答
0

我发现了一些对我有用的东西:

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

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

@blah[i].user.email

(感谢您的评论 - @Baldrick - 我认为我的模型有点破损/非常规,下一个项目要记住的东西)。

于 2012-12-20T11:56:12.163 回答