私は Monologue gem (ブログ用の Rails エンジン) を使用しており、それを /blog のアプリにマウントしています。特定のタグが付いた投稿を取得し、それらの投稿をアプリのホームページ ('/') に表示したいと考えています。Rails c から or を実行してタグまたは投稿を取得できますが、Monologue::Tag
実行Monologue::Post
しようとするとMonologue::Tag.posts.published
(ソース内の特定のタグの投稿をアプリに取得させる方法など)、「未定義のメソッド」が表示されます。それはエンジンだからだと思いますが、エンジンに精通していないだけで、これの適切な構文が何であるかを知ることができませんか? どんな助けでも大歓迎です!
1 に答える
特定のタグの投稿を取得しようとしていますか? 次に、これはあなたが望むものではありません:
Monologue::Tag.posts.published
posts
ここではタグを指定しておらず、 でメソッドを呼び出していますがMonologue::Tag
、それは特定のタグ インスタンスではなく、Monologue::Tag
クラスです。
特定のタグを取得posts.published
したら、それを呼び出すことができます。ソースにあるように、呼び出すこともできますposts_with_tag
これを試すには、最初のタグを取得してからメソッドを呼び出すだけでよいと思います。
Monologue::Tag.first.posts.published
編集:
コメントで言ったように、あなたの問題はposts
、クラスMonologue::Tag
(モデル) ではなく、クラスActiveRecord::Relation
(オブジェクトのコレクション) のオブジェクトに対してメソッドを呼び出そうとしていたことMonologue::Tag
です。first
によって見つかった最初のインスタンスを返しますwhere
。
1 つのインスタンスだけをフェッチすることがわかっている場合の別のアプローチは、find
の代わりに を呼び出すことですwhere
。このような:
Monologue::Tag.find_by(name: "Goals")
これは のインスタンスを返しますMonologue::Tag
。