Rails 中的 find_by_sql,访问结果数组

2023-11-29

我试图在 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

The first.try(:price)需要部分是因为find_by_sql可能会返回一个空数组。如果你尝试做类似的事情first.price在空数组上,您会得到一个异常,类似于NoMethodError: undefined method 'price' for nil:NilClass.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 中的 find_by_sql,访问结果数组 的相关文章

随机推荐

  • 如何使用 masm 中的库或更具体地说是 .lib 文件?

    我已经使用 Visual Studio 2010 制作了一个 lib 文件 现在我想在 masm 中使用它 我怎样才能做到这一点 需要帮忙 我试图在互联网上查看它 但找不到有关如何执行此操作的任何准确答案 这是我使用 Visual C 20
  • 为什么 Laravel API 在 POST 和 PUT 方法上返回 419 状态代码?

    我正在尝试使用 Laravel 创建 RESTful API 我已经使用创建了我的控制器php artisan make 控制器 RestController这是我的控制器代码
  • xcode7 调试器发生了什么变化,我无法再使用“po”/Swift 查看变量

    好吧 xCode7 Swift 发生了什么变化 我不能再使用 poframe 来查看 CGRect 的内容了 打印语句在代码中运行得很好 为什么我不能像以前那样在调试器控制台中查看它 var frame self myLabel frame
  • MFT 编码器 (h264) CPU 利用率高

    我能够使用 Media Foundation Transform MFT 成功地通过 H264 对数据进行编码 但不幸的是我的 CPU 非常高 当我在程序中评论该函数的调用时 我的 CPU 很低 只需执行几个步骤即可获得编码 所以我无能为力
  • 优化 PostgreSQL 中的查询

    SELECT count FROM contacts lists JOIN plain contacts ON contacts lists contact id plain contacts contact id JOIN contact
  • Spring MVC 3.1 REST服务post方法返回415

    我正在做一个 Spring MVC 控制器 但 POST 操作仍然遇到问题 我在 stackoverflow 上阅读了许多解决方案 但没有解决我的问题 我目前的成就 我发送了带有 Id 的 GET 请求 并成功返回了转换为 JSON 的对象
  • 为什么 document.write() 之后的代码没有执行?

    我有以下 JavaScript
  • 通过 Android 应用程序连接到 OracleDB

    感谢您的浏览 希望您能帮助我 目前 我想通过我的 Android 应用程序从 OracleDB 服务器 在 LAN 上 获取一些数据 我将 JDBC 与 ojdbc14 jar 以及 Android 应用程序中的以下代码以及 logcat
  • CSS 向左下方浮动

    我有很多高度可变的 div 我需要这些 div 彼此排序 但是当它们到达窗口末尾时 gt 创建新的 列 现在 div 溢出了 但我需要创建新的 列 BTW 我有使用以下解决方案 webkit column gap 16px webkit c
  • 如何使用包编译和运行java类

    我在文件 MyClass java 文件中有一个名为 MyClass 的类 代码如下 package myclass class MyClass public int add int a int b return a b public st
  • 用选项卡主机滑动

    我有一个 TabHost 控件 不在操作栏中 并且我想让选项卡在用户滑动每个选项卡上的上下文 类似于 Whatsapp 表情符号选项卡 时进行更改 我怎样才能做到这一点 EDIT手感也很重要 我希望上下文应该有滚动动画 无论用户是否滑动或单
  • Facebook Graph Api url 评论和分享计数不再起作用

    我在我的博客中使用 facebook 评论插件 到目前为止 facebook graph api 帮助我检索我网站上每个帖子的评论计数 因此 正如我所说 我一个月前写的帖子 我可以使用 php 和 json decode 检索评论计数 如下
  • 在另一个 div 内水平和垂直居中 div

    我有一个关于将元素在另一个 div 内水平和垂直居中的问题 我正在为客户开发一个网站 这是给我带来麻烦的页面 http staging slackrmedia com halfpast brand collection bremont ht
  • 使用 store sencha touch 2 将数据加载到列表中

    我已经使用 Sencha touch 2 创建了导航视图 导航视图有列表组件 我想使用商店和模型加载它 我根据需要创建了模型并存储 运行我的应用程序时 列表不会呈现任何数据 它还在 conolse 中发出警告 Ext dataview Li
  • 更改可可中标题栏的颜色

    这个问题肯定有人问过 但谷歌搜索后我仍然找不到答案 如何将标题栏 可以使用关闭 最小化和最大化按钮单击并拖动的标题栏 的颜色更改为与 Cocoa 中默认灰色不同的颜色 如果您设置 纹理 窗口的背景颜色 这一区别在 Snow Leopard
  • For 循环:如何解释更改 ArrayList 大小?

    当 for 循环由 ArrayList 的大小控制时 i lt someArrayList size 但是循环的每次迭代都会向列表中添加一个元素 那么循环如何识别大小正在变化 我认为一旦代码被发送到编译器 它就会看到一次大小 然后执行直到达
  • Android 中两个视图可以同时获得焦点吗

    我有一个 EditText 和一个 popupWindown 其中有一个 ListView 现在我触摸 EditText 弹出窗口显示 我需要这种情况 我可以在 SoftInput 中输入一些内容 并且我还可以单击 ListView 中的子
  • 如何以两种不同的方式为后缀 a++ 和前缀 ++a 重载运算符 ++? [复制]

    这个问题在这里已经有答案了 如何以两种不同的方式为后缀重载运算符 a 和前缀 a 应该看起来像这样 class Number public Number operator prefix Do work on this increment y
  • Django Rest框架自定义Response中间件

    我将 Django Rest Framework 与 rest auth 一起使用 login logout register 我有一个中间件 通常由 user logged in 或 user logged out 信号触发 在我的中间件
  • Rails 中的 find_by_sql,访问结果数组

    我试图在 Rails 中以非常快速和肮脏的方式运行查询 而不将模型的其余部分放在适当的位置 我知道这是不好的做法 但我只需要在紧迫的时间内快速得到结果 直到我找到整个解决方案 我的商品有基于重量的运费 重量存储在商品中 价格存储在表ship