こんにちは、
投稿の調理後プロセスがどのように機能するかを理解するお手伝いができれば幸いです。特に以下の部分に興味があります:
なぜ、投稿がすでに調理された後に後処理が行われるのでしょうか?
もし一ボックス(oneboxes)や「特定のユーザーの引用」といった機能がまだ存在していなかった場合、それを追加するために必要なプロセスを順を追って説明していただけると嬉しいです。その過程で、Prettytext(https://github.com/discourse/discourse/tree/f9608c0af5f7b1109117a5aba979acb00c28cf9a/app/assets/javascripts/pretty-text)というライブラリに出会いました。これはマークダウンからHTMLへ、そしてその逆の変換と、プレビューボックスのレンダリングを担当しています。
また、バックエンドの投稿モデルにある rebake 関数も見つけました:
これは post_analyzer の cook メソッドを呼び出します:
この関数はバックエンドで JavaScript を用いたマークダウンの変換を実行します:
当初の考えとしては、コードの重複を減らすためにこのようにしているのだろうと思っていましたが、トップでリンクした CookedPostProcessor を発見しました。どうやら一部の処理は JavaScript のみで行われ、他の一部は JavaScript と Ruby の両方で行われているようです。
まとめると:
- マークダウンからHTML、およびその逆への変換ルールが必要(これはJavaScriptのみのようです)
- HTML を生成するコードが必要(JavaScript と Ruby の両方で一部行われています)
なぜ(2.)が JavaScript と Ruby の両方で行われているのかを知りたいです。具体例を挙げていただけると幸いです。また、この投稿で誤った仮定が含まれていたら、修正していただければ大変嬉しく思います。
ありがとうございます!
Spirobel
fzngagan
(Faizaan Gagan)
2
まず、JavaScript コンソールのネットワークタブを確認し、投稿が作成された際にフロントエンドでキャプチャされ、サーバーに渡されるデータを確認してください。つまり、Rails API に送信されるすべてのデータは、Rails によってさらに処理されます。その後、posts テーブルを見ると、raw と cooked という列があり、これらは投稿の「未処理」と「処理済み」の形式を示しています。
わかりました、回答ありがとうございます。この部分は一つずつ探ってみようと思います。もしかすると、私が取った「第一原理から推論する」というアプローチは、歴史的な経緯から発展してきたものなので、うまくいかないのかもしれません。