2016-02-27 54 views
1

我有什麼:CURRENT_USER可以看到評論僅供網友給他的職位

scaffold Post title body user_id 
scaffold Comment body tag post:references 
post has_many :comments 

當前評論控制器:

def index 
    @comments = Comment.where(tag: [1, 3]) 
    end 

我想啓用當前色器件用戶看到的評論列表所有隻有他帖子。如何做呢?與current_user

+0

請解釋一下你需要什麼 – techdreams

+0

我想讓當前的設計用戶只看到他所有帖子的評論列表。類似於'comment.user_id = current_user_id' –

+0

你想在current_user中查看只有current_user對帖子的評論....對嗎? – techdreams

回答

3

您可以設置直接在has_many :through關係上User模型假定您已經定義了一個has_many :posts關係和PostComment適當的關係。例如,

class User < ActiveRecord::Base 
    has_many :posts 
    has_many :comments, through: :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

現在,由於devise給你current_user,得到用戶的意見很簡單

def index 
    @comments = current_user.comments 
end 

def show 
    @comment = current_user.comments.find(params[:id]) 
end 

希望這有助於。乾杯。

+0

這是實際爲我工作的最簡單的答案。謝謝Bart,謝謝大家! –

1

如果您希望查詢關聯模型列中的信息,則應使用.joins.include調用。根據您指定的設置,這應該是你所需要的:

@comments = Comment.joins(:post).where("posts.user_id": current_user.id) 

或者乾脆:

@comments = Comment.joins(:post).where("posts.user_id": current_user) 

這可能是值得打破這一關成。如果你想讓你的評價模型範圍在其他地方稱呼它。

class Comment < ActiveRecord::Base 
    belongs_to :post 
    scope :on_user_posts, ->(user) { joins(:post).where("posts.user_id": user) } 

那麼你就可以在控制器中調用這個:

@comments = Comment.on_user_posts(current_user).where(tag: [1, 3]) 
+0

1.當我這樣做時,說'在評論'上找不到名爲'posts'的關聯,儘管我可以查詢請參閱'comment.post.user_id'。 2。當我的ddo範圍它說:'未定義的方法'作用域User :: CommentsController:Class' –

+0

在你的Post模型上,你需要添加'has_many:comments'和你的評論模型,你需要添加'belongs_to:post'。我的道歉,我認爲這些已經存在了。範圍必須在模型上定義,而不是控制器。您在控制器中使用命名範圍,但在模型中定義它。 – TJR

+0

這些協會已經存在了,我甚至會進行雙重檢查。這就是奇怪的原因。 '用戶::註釋#索引'中的ActiveRecord :: ConfigurationError,'在評論'上找不到名爲'posts'的關聯。 –

1

定義協會和範圍:

@comments = Comment.on_user_posts(current_user) 

如果需要,您也可以連鎖這個範圍與你已經具備的條件,在模型中

class Comment < ActiveRecord::Base 
    belongs_to :post 
    scope :on_user_posts, lamda{ |user| joins(:post).where("posts.user_id = ?", user.id) } 

並在發佈模型

class Post < ActiveRecord::Base 
    has_many :comments 

現在把這個範圍

@comments = Comment.on_user_posts(current_user).where(tag: [1, 3]) 
+0

'undefined method'lamda'for#' –

+0

使用此代碼 'scope:on_user_posts, - >(user){joins(:post).where(「posts.user_id =?」,user.id )}' – MayankJ

相關問題