如何获得符号之间字符串的最大值?

问题描述 投票:0回答:1

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

如有任何评论,我将不胜感激

ruby-on-rails ruby ruby-on-rails-4
1个回答
0
投票

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 %>
© www.soinside.com 2019 - 2024. All rights reserved.