【发布时间】:2012-03-21 12:37:20
【问题描述】:
这大概是我所拥有的:
我有很多公司通过角色拥有很多用户:
class Company < ActiveRecord::Base
has_many :roles, :dependent => :destroy
has_many :users, :through => :roles
end
还有很多用户可以通过角色拥有很多公司:
class User < ActiveRecord::Base
has_many :roles, :dependent => :destroy
has_many :comapnies, :through => :roles
end
以及将两者结合在一起的许多角色:
class Role < ActiveRecord::Base
belongs_to :user
belongs_to :company
end
这里的想法是用户可以通过通用电子邮件用户名登录,然后将权限分配给每个公司。角色具有 user_id 和 company_id 键以及权限列“user_role”(即访客、用户、管理员等)。
这是 ruby 新手让我失望的地方。当我的用户登录时,我想查询他们拥有哪些公司的权限,并使用下拉菜单即时切换。因此,他们登录并在“公司 A”中处于活动状态,然后他们可以切换到“公司 B”。当他们切换时,company_id 存储在会话变量中(我已经将他们的 user_id 存储在正常运行的身份验证系统中)。
查询此问题的最佳方法是什么?我有一个 user_id,我想检索 company_id、company_name、'user_role' 等列表。然后使用它生成一个弹出列表。
我一直在使用控制台尝试Role.Company.etc.etc,但似乎无法弄清楚这一点。当我在 PHP / MySQL 中执行此操作之前,它会是一个复杂的连接查询。我确信在我无法理解的 Rails 中更容易。
任何帮助将不胜感激。
谢谢,
丹
【问题讨论】:
-
你不能做类似
for company in current_user.companies的事情来做一个列表。要测试您是否正确处理了范围,您可以在其中一个视图中输入<% if current_user? %><%= current_user.companies %><% end %> -
这当然假设您的身份验证在他们登录时使用 current_user。
-
@kobaltz 在视图中触发 SQL 查询是一种不好的形式,因此最好只显示如何在操作中检索公司。
-
所以在你的控制器中,它会像@companies = current_user.companies
-
current_user 是我的用户 ID 的整数值还是实际的用户对象?我已经有一个获取会话存储用户 ID 的应用程序帮助方法 current_user。
标签: ruby-on-rails-3 activerecord