【问题标题】:Rails: Displaying published post by all and unpublished post of current_userRails:显示 current_user 的所有已发布帖子和未发布帖子
【发布时间】:2013-05-28 09:17:06
【问题描述】:

我想知道如何做以下事情:

  • 用户可以查看所有已发布的帖子
  • 用户可以查看未发布的帖子

代码:

# 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

我不确定设置活动记录条件以显示我所追求的内容的正确方法。

非常感谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rails-activerecord


    【解决方案1】:

    你已经很接近了!只需将 && 替换为 +

    # 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
    

    现在您有了一个正确排序的关系,并且只有一个范围!

    【讨论】:

    • 嗨,马特!感谢您的答复。很好的提示 RE 关系与数组。当我使用 + 并试图在我的视图中显示它时,它只显示已发布的帖子,但我想我必须继续弄清楚这个连接是如何工作的。
    • 有没有办法同时显示 Post.published.order('created_at DESC') + Post.unpublished.order('created_at DESC') 顺序 DESC。它似乎首先显示已发布的帖子,然后在块中调用时显示未发布的帖子@post.each do |p|。
    • 既然它变成了一个数组,你可以很容易地做一个sort_by,但是根据你的要求,我认为你可以用一些范围构建一个更好的解决方案,我添加了一个例子。
    • 马特,感谢您抽出宝贵时间帮助我。通过所有的概念,我从你那里学到了很多。
    【解决方案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
    

    【讨论】:

    • 感谢 Sachin,current_user.posts.published 是一个大帮手。在视图块中结合已发布和未发布的方面,你是如何做到的 [@post, @unpublished_post_by_user].each do |p|
    • @WasabiDeveloper 你可以用 + 加入两个集合,在我上面的回答中演示:)
    • posts = @post + unpublished_post_by_user
    • 谢谢大家!我欠你一杯咖啡和一个拥抱。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2015-08-19
    • 2013-03-26
    • 1970-01-01
    • 2020-08-07
    • 2015-09-12
    相关资源
    最近更新 更多