すべてのコンテンツをインポートしましたが、各新しいトピックのトピックの日付が今日の日付から投稿されたかのように変更されるようにしたいです。トピックごとの追加投稿はありません。
トピックのレンチメニューにある「タイムスタンプを変更」です。
表示されるダイアログには次のように説明されています。
トピックの新しいタイムスタンプを選択してください。トピック内の投稿は、同じ時間差を持つように更新されます。
参考までに、APIを使用していたのですが、created_at を実際の投稿日に設定するのを忘れていました。
でも、これを3,000以上の投稿でやる必要があります
API の出番のようですね: updateTopicTimestamp
Railsでできます。検索すればどこかに例があると思います。以下に始め方を示します。
Topic.update_all(created_at: Time.now()
しかし、いくつかテストすることをお勧めします。例えば、投稿も更新したいですよね?
投稿がなく、トピック/最初の投稿が1つしかない場合、提供したコマンドはそのまま機能しますか?
トピックのタイムスタンプを変更するためのダイアログボックスには、次のように表示されます。
トピックの新しいタイムスタンプを選択してください。トピック内の投稿は、同じ時間差を持つように更新されます。
トピックの日付を変更すると、すべての返信が新しい日付に対して正しいものになるように自動的に修正されます。たとえば、トピックが元々1月1日に日付付けされ、返信が1月5日だった場合、トピックの日付を1月2日に変更すると、返信も1月6日に更新されます。簡単です!
興味本位で伺いますが、なぜ3,000以上のトピックすべてに同じ日付を設定したいのですか?
さておき、APIまたはRailsコンソール(使用に慣れている場合)を使用すれば、これを実行できるはずです。(念のため、バックアップを取ることをお勧めします。)
このトピックで関連APIを取得する方法に関する情報がいくつかあります - Reverse engineer the Discourse API
そして、Administrative Bulk Operations には、必要なものを構築するために使用できるさまざまなRailsテクニックの例がいくつかあります(または、検索する際のアイデアになります)。
これを再度引き上げます。追加のサポートが必要です。
これを試しましたが、エラーは発生しませんが、何も変更されないようです。
Jonの提案に従うために、これはRailsコンソールバージョンです。
cd /var/discourse
./launcher enter app
rails c
次に、特定のトピックの場合:
TopicTimestampChanger.new(topic: Topic.with_deleted.find(TOPIC_ID), timestamp: Time.now()).change!
条件なしのすべてのトピックの場合:
Topic.find_each do |topic|
TopicTimestampChanger.new(topic: topic, timestamp: Time.now()).change!
end
updated_at も変更したい場合があります。
