Это дает вам все объекты категории:
@categories = Category.all
Затем, если вы объявите has_many: через ассоциации вы можете сделать что-то вроде следующего:
@categories.each do |category|
if category.users.include?(current_user)
# User has publications
publications = category.publications.select { |pub| pub.user == current_user }
else
# User has no publications
end
end
(has-manyсквозные объявления:
class User < AR:B
has_many :publications
has_many :categories, :through => :publication
end
class Publication < AR:B
belongs_to :user
belongs_to :category
end
class Category < AR:B
has_many :publications
has_many :users, :through => :publication
end
... предупреждение: сухой код)
Хотя, вероятно, есть более удобный способ сделать это с использованием именованных областей.