Список всех групповых папок
Трудно описать словами, я лучше покажу вам код и объясню. Прямо сейчас я могу сказать вам, что я пишу приложение с 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 ответ
Вы можете попытаться настроить именованную область и получить через нее.