3

的未發表的文章中,我想顯示發佈後知道怎麼一會做到以下幾點:Rails的:所有和CURRENT_USER

  • 用戶可以查看所有已發佈的帖子
  • 用戶可以查看查看他們未發表的帖子

代碼:

# Post model 
scope :published, where(is_published: true) 
scope :unpublished, where(is_published: false) 

# Post controller 
def index 
@Post = Post.published 
if user_signed_in? 
    @Post = Post.published && Post.unpublished.where(user_id: current_user.id) 
end 
end 

我真的不知道什麼是正確的方式本身打開一個活動的記錄條件來顯示我後面的內容。

非常感謝。

回答

3

你非常接近!只需更換& &與+

# Post controller 
def index 
@posts = Post.published 
if user_signed_in? 
    @posts = Post.published + Post.unpublished.where(user_id: current_user.id) 
end 
end 

要知道,像參加這將改變@posts從關係到一個數組對象。

另請參閱@ SachinR對Post.unpublished.where(user_id: current_user.id)線條的改進的解答。

根據您的要求,我想你可以用示波器做的更好:

#Post model 
scope :published_and_user, lambda{|user| where("is_published = ? OR user_id = ?", true, user.id)} 
scope :ordered, :order => "created_at DESC" 

# Post controller 
def index 
@posts = Post.published.ordered 
if user_signed_in? 
    @posts = Post.published_and_user(current_user).ordered 
end 
end 

現在你有一個正常有序的關係,只有一個範圍!

+0

嘿馬特!感謝您的答覆。偉大的技巧RE關係與陣列。當我使用+並試圖在我的視圖中顯示它時,它只顯示發佈的帖子,但我想我必須弄清楚這個連接是如何工作的。 –

+0

有沒有辦法按順序顯示Post.published.order('created_at DESC')+ Post.unpublished.order('created_at DESC')。它似乎顯示已發佈的帖子,然後在塊中調用未發佈的帖子@ post.each do | p |。 –

+2

既然它變成了一個數組,你可以很容易地做一個'sort_by',但根據你的要求,我認爲你可以用一些範圍構建一個更好的解決方案,我已經添加了一個例子。 – Matt

2

要獲得所有發佈的記錄

@posts = Post.where("user_id = ?", current_user.id).published 

要獲得所有未發表的記錄

@posts = Post.where("user_id = ?", current_user.id).unpublished 

If Post belongs to user 

    class Post 
     belongs_to :user 
    end 

then you can directly use 
current_user.posts.published 
current_user.posts.unpublished 
+0

謝謝薩欽,current_user.posts.published是個大幫手。在視圖塊中結合已發佈和未發佈的方面,你如何做到這一點[@post,@unpublished_post_by_user] .each do | p | –

+0

@WasabiDeveloper你可以加入+ +的兩個集合,在上面的答案中演示:) – Matt

+0

posts = @post + unpublished_post_by_user –

相關問題