это у меня есть сообщения пользователя, и я хочу разбить их на 3, но все, что приходит в голову, нечетно/даже вот так:
@Post1 = Post.where('post_id % 2 = 0')
@post2 = Post.where('post_id % 2 != 0')
есть способ добавить @post3
и разделить сообщения на 3 категории. это для исследовательских целей и спасибо..
Вы можете сделать это следующим образом:
@Post1 = Post.where('post_id % 3 = 0')
@post2 = Post.where('post_id % 3 = 1')
@post3 = Post.where('post_id % 3 = 2')
Это тот же подход, что и четный/нечетный. Оператор% возвращает мода деления, поэтому вы можете расширить его до любого числа, которое вы хотите. Во всяком случае, не думайте, что это хороший способ сделать это, особенно если ваше количество наборов слишком велико. Я бы предложил использовать in_groups_of
(https://apidock.com/rails/Array/in_groups_of).
В вашем случае вы можете использовать in_groups_of следующим образом:
@posts = Post.all.in_groups_of((Post.count.to_f/3).ceil, false)
Таким образом вы можете назначить его следующим образом:
@Post1 = @posts[0]
@post2 = @posts[1]
@post3 = @posts[2]
или, я думаю, будет намного лучше, присваивает вам только переменную @posts. Затем, по вашему мнению, вы повторяете это следующим образом:
- @posts.each do |group_of_posts|
- group_of_posts.each do |post|
# do whatever you want
Таким образом, ваш код намного проще и проще в обслуживании. Удачи!
Post.all.in_groups_of(Post.count / 3)
? Помимо очевидного,post_id % 3 = 2
и т. Д.