【发布时间】:2013-05-08 06:22:37
【问题描述】:
很难用语言来描述,我宁愿给你看代码并解释。现在我可以告诉你,我正在用类似 UNIX 的权限系统编写应用程序,但我遇到了一个问题,我还不知道如何解决。以下是我的关系模型。
class Document < ActiveRecord::Base
attr_accessible :name, :rights
belongs_to :folder
validates :folder_id, presence: true
end
class Folder < ActiveRecord::Base
attr_accessible :name, :rights
belongs_to :user
has_many :documents, dependent: :destroy
validates :name, presence: true
validates :user_id, presence: true
end
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :user_id
has_many :folders
has_many :group_users
has_many :groups, :through => :group_users
end
class Group < ActiveRecord::Base
attr_accessible :name, :owner
has_many :group_users
has_many :users, :through => :group_users, dependent: :destroy
end
class GroupUser < ActiveRecord::Base
attr_accessible :group_id, :user_id
belongs_to :user
belongs_to :group
end
考虑到我的系统,组中的每个用户都应该有权访问组所有者拥有的所有文件夹(现在不考虑权限)。这就是我尝试列出用户有权访问的所有文件夹的方式。
在文件夹控制器中
def list_folders
@user_groups = current_user.groups
end
在列表文件夹视图中
<table class="table table-striped">
<tr>
<td>Folder name</td>
<td>Documents</td>
<td>Actions</td>
</tr>
<% for group in @user_groups %>
<% user = User.find(group.owner)%>
<% folders = user.folders %>
<% for folder in folders %>
<tr>
<td><%= folder.name %></td>
<td>#</td>
<td><%= link_to 'view', folder_path(folder.id) %></td>
<tr>
<% end%>
<% end %>
</table>
所以问题在于现在的代码,如果用户自己拥有一个组,他的文件夹也会被获取。而且我不希望这种情况发生,因为我有其他地方可以观看和编辑用户拥有的文件夹。在这里,我只想带来他从其他团体获得的那些。我试图以某种方式将他排除在查询之外,但没有成功。然后我试图从@user_groups 数组中删除他,但它也没有按照我想要的方式工作。我对这个问题的任何建议持开放态度,如果可能的话,我想获得一些关于如何重写视图中代码的提示,因为迭代器中的迭代器(或循环?)对我来说看起来很乱。
【问题讨论】:
标签: ruby-on-rails ruby hints