問題タブ [user-generated-content]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - ユーザー生成コンテンツの「編集者承認済み」バージョンの Active Record スコープの構築
ユーザーがコンテンツ (投稿) を公開できる StackOverflow に似たサイトを運営しています。また、編集者が選んだ注目の投稿を紹介するフロントページもあります。
ユーザーがいつでも投稿を編集できるようにしたいのですが、編集者による最初のレビューなしではフロントページに何も表示されないようにしたいと考えています。
これを解決するために、Post を特集するたびにpaper_trail
現在のバージョンを保存するようなバージョン管理システムを実装できると考えました。version_id
このようにして、編集者がレビューしたコンテンツをフロントページに簡単に取得しながら、ユーザーのプロフィールなど、サイトの重要度の低い部分に最新バージョンを表示することができます。当社の編集者は定期的に変更を確認し、承認することができます。
共有インターフェイスと最小限の重複コードを維持しながら、一部のコントローラーでレビュー済みのバージョンを選択し、他のコントローラーで最新バージョンを選択できる最もクリーンなアプローチは何だろうと思っています。
理想的なソリューションにはスコープが含まれているため、レビュー済みのバージョンをreviewed
簡単に取得して取得し、最新バージョンを取得できます。Post.reviewed
Post.all
ただし、レビュー済みのバージョンを取得するには、オブジェクト PaperTrail ストア ( version.reify
) を逆シリアル化する必要があり、スコープ内では不可能と思われるため、これについてどうすればよいかわかりません。
代わりに、次のようにクラス メソッドを使用できます。
def self.reviewed
all.map do |post|
Version.find(post.version_id).reify
end.compact! || Post.none
end
ただし、これは実際のスコープではないため、チェーン化できないなど、理想的とは言えません。
または、次のような Post インスタンス メソッドを使用することもできます。
def reviewed_version
Version.find(version_id).reify
end
これは理論的には機能しますが、これは、ビュー全体でこのメソッドを呼び出す必要があることを意味しますが、正しいデータをフェッチするのはコントローラーの責任です。render collection: @posts
フロントページとユーザー プロファイルの両方に を持っているとしましょ_post.html.erb
うreviewed_version
。
私は PaperTrail に縛られているわけではありませんが、複製する必要のない優れた点がたくさんあります。ただし、PaperTrail が柔軟性に欠けると判明した場合は、他の方向性を検討することもできます。
FWIW、私は Draftsman も見ましたが、「ドラフト」は例外と見なされます (つまり、ほとんどの場合、ドラフトは表示されません)。一方、私の場合は、ほとんどのページで最新バージョンを表示したいのですが、フロントページのような特定のいくつかを除いて.
file - ファイルタイプが変更されたかどうかをC#で確認する
ユーザーが曲をアップロードできるリズムスマッシャーというリズムゲームに取り組んでいます。
問題は、マルウェアなどをアップロードすることです。2 つのうちのどちらかが起こったかどうかを知りたいです。
アップロードしているファイルの種類が変更された (以前は .txt、.mp4、現在は .mp3)、またはアルゴリズム (など) が別のファイル形式である必要があることが検出されました。
どんな助けでも大歓迎です、ありがとう!