Tag: 系列

有效地迭代和改变关联

我们的代码有效地做到了这一点。 obj.things.each |thing| … do some stuff … obj.things.destroy(thing) … do some more stuff… end 我们发现,在更改CollectionProxy的同时迭代CollectionProxy会导致只有一半的项被迭代。 目前我们正在通过将代理扁平化为数组来解决这个问题。 但这意味着将所有things复制到内存中。 obj.things.to_a.each |thing| … end 有没有办法迭代和变异集合而不将整个关联拉入内存? 或者,是否有比我们使用的模式更好的模式? 例如,包装代码是我们每次销毁关联时都不想做的事情,因此我们不使用关联钩子。 我们可以写一个可以使用钩子的子类或范围吗? 更新 : 我发布了更大的问题 。

在collection_select上使用大写

如果在我找不到它之前已经回答了这个问题。 我有以下内容: = f.collection_select :sex_id, @sexes, :id, :name 这在控制器中: @sexes = Sex.all 性别都以小写forms存储,如下所示: id|name 1|steer 2|heifer 3|holstein 我需要他们用Capital First字母输出: Steer Heifer Holstein 我试过了: = f.collection_select :sex_id, @sexes, :id, :name.capitalize = f.collection_select :sex_id, @sexes, ‘id’, ‘name’.capitalize 但它们不起作用,我并没有真正期待它们,但在发布之前不得不尝试它们。

Ruby on Rails中的多变量部分

我有一部分我希望用集合和另一个变量进行渲染。 是否可以将多个变量传递给部分变量? 为了显示: 类别HABTM品牌 这只是半伪代码,但我想做的事情如下: “mypartial”, :collection => c.brands, :object => c.id %> 部分需要类别ID以及“current_brand”。 有任何想法吗?

有没有一种很好的方法来计算ruby中的范围元素之和

co计算范围总和的好方法是什么? 输入 4..10 产量 4 + 5 + 6 + 7 + 8 + 9 + 10 = 49

如何测试两个时间范围是否重叠?

我需要实现预订function,并确保预订不会在Rails应用程序中重叠。 cover? between? 方法不是我需要的。 与同一型号上的其他潜在范围相比,我必须确保时间范围的唯一性,并且有效地进行。 我认为可以使用overlaps?来完成它overlaps? 。 问题是,对于这样的事情,它返回TRUE: (1..5).overlaps?(5..9) => true 如果我比较了另一个开始时的预订( 3:30 – 4:00对4:00 – 4:30 ),它会说它们确实重叠,但技术上并没有。 那会是个问题吗? ValidatesOverlap似乎处理问题,包括边缘重叠。 有什么建议?

(Ruby)如何检查范围是否包含另一个范围的子集?

如果我有两个重叠的范围: x = 1..10 y = 5..15 当我说: puts x.include? y 输出是: false 因为这两个范围只是部分重叠。 但是如果我希望当两个范围之间存在部分重叠时它是“真实的”,我该怎么写呢? 换句话说,我需要一种方法来知道一个范围何时包含另一个范围的子集。 我假设有一种优雅的方式在Ruby中编写它,但我能想到的唯一解决方案是冗长的。

Ruby’Range.last’没有给出最后一个值。 为什么?

在ruby Range对象中使用三点符号时,我得到: (0…5).each{|n| pn} 0 1 2 3 4 当我使用’last’方法时,我得到: (0…5).last => 5 我原以为4 这是一个错误吗? 或者是否有一些我不了解Range对象的概念?

是否有一种优雅的方法来排除范围的第一个值?

假设我的范围是0到10: range = 0…10 三个点表示排除最后一个值(10): range.include? 10 => false 现在,有没有类似和优雅的方法来排除第一个值? 对于上面的示例,这将意味着包括所有比0( > , 而不是 >= )大于0且小于 10的值。

在Ruby中使用step!= 1声明一个整数范围

更新2 :对于子孙后代,这就是我如何做到这一点(感谢Jorg的输入): 100.step(2, -2) do |x| # my code end (显然有很多方法可以做到这一点;但听起来这是最“Ruby”的方式;而这正是我所追求的。) 更新 :好的,所以我要找的是step : (2..100).step(2) do |x| # my code end 但事实certificate,在我原来的问题中,我并非100%即将到来。 我实际上想要向后迭代这个范围。 令我惊讶的是,消极的一步是不合法的。 (100..2).step(-2) do |x| # ArgumentError: step can’t be negative end 那么: 我该怎么做呢? 嘿伙计们,我对Ruby很新 ,所以要温柔。 假设我想迭代从2到100的偶数范围; 我该怎么办? 显然我能做到: (2..100).each do |x| if x % 2 == 0 # my code end end […]

关于ruby系列?

像这样 range = (0..10) 我怎么能得到这样的数字: 0 5 10 每次加5次但不到10次 如果range =(0..20)那么我应该得到这个: 0 5 10 15 20