私は 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。