列出所有组文件夹

时间:2013-05-14 04:41:33

标签: ruby-on-rails ruby hints

难以用文字描述,我宁愿向您展示代码并进行解释。现在我可以告诉你,我正在用类似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

在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数组中删除,但它也没有按照我想要的方式运行。我对这个问题的任何建议持开放态度,如果可能的话,我想得到一些关于如何在视图中重写代码的提示,因为迭代器中的迭代器(或循环?)看起来很麻烦。

1 个答案:

答案 0 :(得分:0)

您可以尝试设置命名范围并通过该范围进行检索。

http://guides.rubyonrails.org/active_record_querying.html#scopes