gpt4 book ai didi

ruby-on-rails - 附加到事件记录关系对象

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:36 24 4
gpt4 key购买 nike

我有一个 Post 模型。有一个范围可以找到启用的帖子。帖子可以属于一个类别。我还有一个类别模型,类别排名。类别有很多帖子。我想首先显示属于不同类别(前 20 个类别)的 20 个不同帖子,然后按发布时间的降序显示帖子的其余部分。

这是我的

发布模型:

class Post < ActiveRecord::Base
belongs_to :categories
scope :by_category, ->(category) { joins(categories).where(categories: { id: category.id }) }
scope :enabled, where(disabled: false)
scope :recent, order('published_at DESC')

类别模型

class Category < ActiveRecord::Base
has_many :feeds
scope :most_popular, order('rank ASC')

家庭 Controller

def index
Category.most_popular.limit(20).each do |cat|
@posts= Post.enabled.recent.by_category(cat).page(1).per(30)
end

在 View 文件中,我正在呈现我使用@posts 收到的帖子的属性。但很明显,它只返回在循环中找到的最后一个类别的帖子。基本上它不会追加。我尝试使用 << 追加..如 -

@posts <<  Post.enabled.recent.by_category(cat).page(1).per(30)

但它没有给出<< nil:nil 类的方法

我尝试将@posts 制作成一个数组,但它并没有让 page 和 per of kaminari 发挥作用。

我尝试使用 new 将 @posts 作为 ActiveRecord::Relation 对象,它给出了参数错误。

我尝试将@posts 作为 Post 的对象,但它说 undefined method << for Post,因为当然,<< 不是我的模型类的方法。我也关注了一些 SO posts但它似乎不适合我的步伐。

基本上,我对实现这一目标的见解是将记录附加到模型对象中,然后显示该对象。我什至怀疑我的方法是否足够好。可能有更有效的方法来做到这一点,我可能在 RoR 中遗漏了这一点。

最佳答案

你可以这样做:

def index
posts_ids = []
Category.most_popular.limit(20).each do |cat|
post_ids << Post.enabled.recent.by_category(cat).map(&:id)
end
@posts = Post.find( post_ids ).page(1).per(30)
end

关于ruby-on-rails - 附加到事件记录关系对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27742980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com