难以用语言描述,我宁愿向您展示代码并解释。现在我可以告诉你,我正在写一个应用程序与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
考虑到我的系统,组中的每个用户都应该有权访问组所有者拥有的所有文件夹(现在没有权限)。这就是我试图列出所有文件夹的方法,用户可以访问。
In Folders controller
def list_folders
@user_groups = current_user.groups
end
list_folder视图
<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数组中删除他,但它也没有按我想要的方式工作。我对这个问题的任何建议都是开放的,如果可能的话,我想得到一些关于如何在视图中重写代码的提示,因为迭代器中的迭代器(或循环?)对我来说看起来很乱。
您可以尝试设置一个命名作用域并通过它检索。
http://guides.rubyonrails.org/active_record_querying.html范围