Список всех групповых папок

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

Вы можете попытаться настроить именованную область и получить через нее.

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

Другие вопросы по тегам