目前我正在开发一个应用程序,它涵盖了一些非常基本的文档管理。 在此期间,出现了一个问题。
以下是该方案:
我对用户和文档有一个经典的多对多关系(用户可以下载许多文档,许多用户可以下载文档)。
在此应用程序中,有#34;公共文档"这应该是每个人都可以访问的。
这里明显的(和天真的)解决方案是添加"公共文档"到每个新用户的映射表。但这真的很天真,我不想编写一个将这些元素插入映射表的例程,这也会浪费数据库存储。
问题
Rails中是否有办法将这些公共文档(通过标记标记)添加到ActiveRecord中的用户可下载文档中?
实施例
文档
SELECT product.title as pTitle, category.title AS cTitle
用户
Id | Name | IsPublic
------------------------------
1 | Test | false
2 | Public | true
可下载文件:
Id | Name
--------------------
1 | sternze
我现在想要做的是:
User_id | Doc_id
----------------------
1 | 1
我的协会如下:
@user = User.find(1)
@user.documents # --> now contains documents 1 & 2
# I don't want to add rows to the documents inside the controller, because the data is dynamically loaded inside the views.
我无法找到一种简单的方法来完成我想要的东西,但也许我忽略了一些东西。
答案 0 :(得分:3)
在公共文档的文档中创建范围
class Document
scope :public, -> {public?}
end
创建用户方法' all_documents'
class User
def all_documents
documents + Document.public
end
end
然后在迭代中使用all_documents
而不是documents