gpt4 book ai didi

ruby-on-rails - Rails 中的 find_by_sql,访问结果数组

转载 作者:行者123 更新时间:2023-12-04 08:46:54 25 4
gpt4 key购买 nike

我试图在 Rails 中以非常快速和肮脏的方式运行查询,而没有将模型的其余部分放在适当的位置。我知道这是不好的做法,但我只需要在紧迫的时间范围内快速得出结果,直到我制定出完整的解决方案。

我有一些商品有运费,根据重量计算。重量存储在元素中,价格存储在表shipping_zone_prices中,我目前所做的就是查找与重量比待售元素重的第一行相关的价格:

class Item < ActiveRecord::Base
def shipping_price
item_id = self.id
shipping_price = ShippingZonePrice.find_by_sql(
"SELECT z.price as price
FROM shipping_zone_prices z, items i
WHERE i.id = '#{item_id}'
AND z.weight_g > d.weight
ORDER BY z.weight_g asc limit 1")
end
end

这样的作品。 SQL 可以完成这项工作,但是当插入应用程序时,如下所示:
 <%= @item.shipping_price %> Shipping

我得到以下显示:
[#<ShippingZonePrice price: 12>] Shipping

在这个例子中,'12' 是从数据库中提取的价格,是正确的。 @item.shipping_price.class 返回“数组”。尝试使用 [0](或任何其他整数)访问数组会返回空白。

有没有另一种方法可以访问它,还是我错过了一些基本的东西?

最佳答案

由于您正在定义一个实例方法,我认为它应该返回 price如果存在或 nil
尝试这样的事情:

def shipping_price
ShippingZonePrice.find_by_sql(
"SELECT z.price as price
FROM shipping_zone_prices z, items i
WHERE i.id = '#{self.id}'
AND z.weight_g > d.weight
ORDER BY z.weight_g asc limit 1").first.try(:price)
end

那么这应该适合你:
@item.shipping_price
first.try(:price)部分是需要的,因为 find_by_sql可能返回一个空数组。如果你尝试做类似 first.price 的事情在一个空数组上,你会得到一个类似 NoMethodError: undefined method 'price' for nil:NilClass 的异常。 .

关于ruby-on-rails - Rails 中的 find_by_sql,访问结果数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496967/

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