StackOverflow 社区您好。
我有下表,其中有两个表“id”(整数)和“num_pot”(varchar 255),其中包含以下数据信息:
|transformers|
|id| |num_pot|
1 1.0
2 2.12/6
3 5/6/8
4 2.9/40
5 2.1
这里是transformer_controller.rb,它显示所有注册表
def index
@transformers = Transformer.all
end
我正在尝试在我的数组视图index.html.erb上显示以下信息
<% @transformers.each do |array| %>
<%= array.num_pot %>
<% end %>
我正在尝试创建代码来检查字符串并在 num_pot 列上进行比较:
|num_pot|
1.0 # CHECK THE GREATEST VALUE = 1.0
2.12/6 # CHECK THE GREATEST VALUE = 6
5/6/8 # CHECK THE GREATEST VALUE = 8
2.9/40 # CHECK THE GREATEST VALUE = 40
2.1 # CHECK THE GREATEST VALUE = 2.1
如何显示以下数据(字符串上的最大值):
|num_pot|
1.0
6
8
40
2.1
我使用“max”尝试了以下代码,但出现错误:
<% @transformers.each do |array| %>
<%= array.num_pot.max(1) %>
<% end %>
undefined method `max' for "2.12/6":String
如有任何评论,我将不胜感激
num_pod
列中的值如您所写 - 字符串而不是数字列表。这意味着,要仅渲染其中一个值并且仅渲染其中最大的值,您首先需要将字符串拆分为多个部分。然后将各个部分转换为浮点数,以便能够比较并选择最大值。
我们举个例子:
'5.2/6/8'.split('/')
#=> ['5.2', '6', '8']
'5.2/6/8'.split('/').map(&:to_f)
#=> [5.2, 6, 8]
'5.2/6/8'.split('/').map(&:to_f).max
#=> 8
最后两个步骤可以简化为
max_by(&:to_f)
,因为在您的情况下,可以通过浮点值比较它们的值,但返回要渲染的字符串值。
使用此功能,您应该通过将视图更改为以下方式获得预期结果:
<% @transformers.each do |transformer| %>
<%= transformer.num_pot.split('/').max_by(&:to_f) %>
<% end %>
或者,为了更容易在视图中阅读并可重用,请将此方法添加到
Transformer
中的app/models/transformer.rb
模型中:
def max_num_pot
num_pot.split('/').max_by(&:to_f)
end
并将视图更改为:
<% @transformers.each do |transformer| %>
<%= transformer.max_num_pot %>
<% end %>