カスタムフィールドに基づいてトピックを取得しますか?

更新:ほぼ動作するようになりました(!)。これで、カスタムフィールドの値に一致する「最新」のトピックが表示されます(config/routes.rb ファイルの文脈で最も意味をなすものとして、#latest メソッドを選びました)。

重要なのは、実際に関連するカスタムフィールド fun_level の値を持つすべてのトピックがページに読み込まれることです。それを実現するために他に何か必要なことはありますか?


以下は、自分のメモ用として、また他の人の参考になればという思いで記載したコードです:

–カスタムフィールド :fun_level を作成しました。その後:

plugin.rb

TopicQuery.add_custom_filter(:fun_level) do |topics, query|
  if query.options[:fun_level]
    topics.where("topics.id in (
      SELECT topic_id FROM topic_custom_fields
      WHERE (name = 'fun_level')
      AND value = '#{query.options[:fun_level]}'
    )")
  else
    topics
  end
end

/connectors/my-plugin-outlet/fun-level.js.es6(関連ページにアクセスした際に有効化される JavaScript ファイルです。この JavaScript はイニシャライザー内や、プラグインアウトレットにリンクするコネクター内に配置することも可能です。私はコネクターに紐付いたコードを使うのが好きなので、ここでは setup コンポーネントを使用します):

const ajax = require('discourse/lib/ajax')

export default {
    setupComponent(args, component) {
      let parsedResultArray = []
      var endPoint = '/latest?fun_level=' + funLevel  //funLevel = パラメータから取得した値を持つ変数
      ajax(endPoint).then(function (result) {
            console.log('その fun レベルに一致するトピックのリスト結果 = ')
            console.log(result.topic_list.topics)
            //結果を解析し、parsedResultArray に読み込む
            component.set('showTopics', parsedResultArray        
      })
   }
}

これで、my-plugin-outlet 経由でテンプレートに配置された対応するコンポーネント内の {{topic-list topics=showTopics}} にトピックが読み込まれるようになります。

これは大きな前進です。どうもありがとうございました@angus

「いいね!」 4