gpt4 book ai didi

ruby - sprintf 与 sinatra 不兼容吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:53:10 25 4
gpt4 key购买 nike

假设我有这个:

class Account
...
property :charge, Decimal, :precision => 7, :scale => 2
...
classy stuff
...

def self.balance(prefix)
x = Account.get(prefix.to_sym).order(:fields => [:charge]).sum(:charge)
sprintf("%5.2f", x)
end
end

(编辑:所有 :charge 字段的值为 0.13E2 (0.1E2 + 0.3E1)。这是正确返回的。只有在 View 中,它似乎从 sprintf)

在 IRB Account.balance(:AAA) 中返回 => "13.00"

如果我从 View 中调用 Account.balance(:AAA),我会在/accounts 处得到 TypeError无法将 nil 转换为 Float

Account.balance(:AAA) 在 View 中我称之为 except 的任何地方都有效。如果我删除 sprintf("%5.2f", x) 我会在我的 View 中得到 0.13E2(在 View 中使用 Account.balance(:AAA).to_f 得到 13.0)

sinatra 与 sprintf 不兼容吗?还是我不明白如何使用 sprintf

(编辑:这是令人反感的观点:)

<section>
<% @accounts.each do |account| %>
<article>
<h2><%= account.prefix %></h2>
<span><p>This account belongs to <%= account.name %> & has a balance of $<%= Account.balance(account.prefix) %>.</p></span>
</article>
<% end %>
</section>

最佳答案

balance 定义为实例方法而不是类方法不是更有意义吗?从您的示例看来,您无论如何都在以 account 特定的方式调用 balance,所以为什么不这样做:

# the model

class Account
#...

def balance
amount = self.order(:fields => [:charge]).sum(:charge)
sprintf "%5.2f", amount

# or the infix version:
"%5.2f" % amount
end
end

,

# the view

...balance of $<%= account.balance %>...

我知道这并没有解决 sprintf 本身,但问题更可能来自稍微复杂的查找而不是来自内置方法。即使我的特定代码不适合您的应用程序,也可能值得简化查找步骤,即使这涉及更多代码行。

这种方法的优点是毫无疑问您将获得正确的 Account 记录。

关于ruby - sprintf 与 sinatra 不兼容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7680807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com