Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用RubyonRails只获取两个条件之间的记录?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 如何使用RubyonRails只获取两个条件之间的记录?

Ruby on rails 如何使用RubyonRails只获取两个条件之间的记录?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个表项目排名与排名模型。其中一些记录的布尔值为true 带有布尔值的元素应作为节的标题,排在后面的元素是节的元素,直到下一个布尔值代表不同的节 如何按顺序对每个会话(布尔值为true的项)和下一个项进行循环 在控制器中,我添加了 @sections = Item.where(title: true).rank(:row_order) 现在我不知道如何只获取每个部分之后和下一部分之前的项目 非常感谢您的帮助 谢谢您可以按顺序获取所有项目,并使用布尔属性在该集合上使用slice\u。如果我理

我有一个表项目排名与排名模型。其中一些记录的布尔值为true

带有布尔值的元素应作为节的标题,排在后面的元素是节的元素,直到下一个布尔值代表不同的节

如何按顺序对每个会话(布尔值为true的项)和下一个项进行循环

在控制器中,我添加了

@sections = Item.where(title: true).rank(:row_order)
现在我不知道如何只获取每个部分之后和下一部分之前的项目

非常感谢您的帮助


谢谢

您可以按顺序获取所有项目,并使用布尔属性在该集合上使用
slice\u。如果我理解正确的话,订购是通过您设置中的排名模型完成的

为了得到一个可运行的示例,我将使用
Struct
而不是
ActiveRecord

Item = Struct.new(:name, :is_title)
items = [
    Item.new( 'title 1',   true  ),
    Item.new( 'item  1.1', false ),
    Item.new( 'item  1.2', false ),
    Item.new( 'item  1.3', false ),
    Item.new( 'item  1.4', false ),
    Item.new( 'item  1.5', false ),
    Item.new( 'item  1.6', false ),
    Item.new( 'title 2',   true  ),
    Item.new( 'title 3',   true  ),
    Item.new( 'item  3.1', false ),
    Item.new( 'title 4',   true  ),
    Item.new( 'item  4.1', false ),
    Item.new( 'item  4.2', false ),
    Item.new( 'item  4.3', false ),
]

items_per_chapter = items.slice_before{ |item| item.is_title }
items_per_chapter.each do |items|
  puts '----------'
  items.each do |item|
    puts item.name
  end
end
这会将以下内容写入标准输出:

----------
title 1
item  1.1
item  1.2
item  1.3
item  1.4
item  1.5
item  1.6
----------
title 2
----------
title 3
item  3.1
----------
title 4
item  4.1
item  4.2
item  4.3

您试图根据哪两个条件进行查询?节是标题为true的项,然后我需要查询标题为false且排名在2个节(标题为true的项)之间的项。我建议首先执行数据库规范化,2个表-
TitleItem
item
,其中项属于标题项。这甚至可以是自联接表,其中项目具有section\u id键。因此,您需要对标题为true的项目进行排序,然后在顺序中添加标题为false的项目?基本上是标题为1、项目为1、项目为2、标题为2、项目为3、项目为XXX