2016-11-17 13 views
1

Userモデルでは、インスタンスメソッドactive_postsが機能しません。ユーザーのアクティブ投稿をすべて取得する

私はuserレコードをつかんでいますが、その後、そのレコードのために私はblogspostsテーブルを結合し、そのuserのためにのみアクティブpostsを返すために、ポストのactive属性でフィルタリングする必要があります。

class User < ApplicationRecord 
    has_many :blogs 
    has_many :posts, through: :blogs 

    def active_posts 
    joins(blogs: :posts).merge(Post.active).distinct 
    end 
end 

class Blog < ApplicationRecord 
    belongs_to :user 
    has_many :posts 
end 

class Post < ApplicationRecord 
    belongs_to :blog 
    belongs_to :user, through: :blog 

    scope :active, -> {where(active: true} 
end 

私は、次のコマンドを実行します。

User.first.active_posts 

そして、ここではエラーです:

NoMethodError Undefined method 'joins' on the user record

答えて

0

はちょうど私のエラーを実現。

active_postsメソッド内でposts.activeとコールするだけです。

def active_posts 
    posts.active 
end 

joinsは、コレクションに使用されます。したがって、インスタンスメソッドではなく、モデル内のクラスメソッドに対してjoinsを使用します。単純なエラー。

+1

'join 'はクラスメソッドです - あなたはインスタンスからそれを呼び出していました。 – ReggieB

関連する問題