現在、私は非常に基本的なドキュメント管理をカバーするアプリケーションを開発しています。 この間、質問が表示されました。ここでレールはデフォルト値でhas_manyを返しますActiveRecord
はシナリオです:
私は、ユーザーおよびドキュメント(ユーザーが多くのドキュメントをダウンロードすることができますし、文書が多くのユーザーによってダウンロードすることができます)のための古典的な多対多の関係を持っています。
このアプリケーションの中には、誰でもアクセスできる「公開文書」があります。
ここでの明らかな(そして素朴な)解決方法は、新規のユーザーごとにマッピングテーブルに「公開文書」を追加することです。しかし、これは本当に素朴ですし、これらの要素をマッピングテーブルに挿入するルーチンを書くことは望ましくありません。これは、データベースストレージも浪費します。
質問
はActiveRecordの中のユーザーのダウンロードの文書に(フラグ経由でマークされている)、これらの公文書を追加するためのRailsでの方法はありますか?
例:
ドキュメント
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.
私の団体は次のとおりです。
class User < ApplicationRecord
has_many :downloadable_documents
has_many :documents, through: :downloadable_documents
end
class DownloadableDocuments < ApplicationRecord
belongs_to :user
belongs_to :document
end
class Document < ApplicationRecord
has_many :downloadable_documents
has_many :users, through: :downloadable_documents
end
私は簡単な方法を見つけることができませんでした私が望むものを達成するために、しかし多分私は何かを見過ごした。