首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:通过模型方法访问和扩展SQL查询

Rails:通过模型方法访问和扩展SQL查询
EN

Stack Overflow用户
提问于 2014-07-07 02:05:37
回答 1查看 27关注 0票数 0

我正在处理的Rails应用程序有一个exchange_rate表,在进行计算以将一种货币转换为另一种货币时,我希望访问该表。这张桌子是这样的:

代码语言:javascript
复制
id | base_currency_id | currency_id | exchange_rate |
---+------------------+-------------+---------------+
2  |                1 |           2 |        0.9345 |
3  |                1 |           3 |        0.5000 |

exchange_rate模型如下所示:

代码语言:javascript
复制
class ExchangeRate < ActiveRecord::Base
  include ActiveModel::ForbiddenAttributesProtection
  validates :base_currency_id, :currency_id, :exchange_rate, presence: true
  ...
  def self.matching_exchange_rate(base_currency)
    ExchangeRate.where("base_currency_id = ?",base_currency)
  end 

  # Commented out as I can't get it to work yet:
  # def self.matching_exchange_rate (base_currency, target_currency_id)
  #  where("base_currency_id = ?",base_currency " and currency_id = ?",target_currency_id)
  # end 

我一直在调用/调用不完全但工作的函数matching_exchange_rate,如下所示:

代码语言:javascript
复制
x_rate = ExchangeRate.matching_exchange_rate(user_currency_id)
puts "x_rate = " + x_rate.to_s

这在日志中显示为:

代码语言:javascript
复制
x_rate = #<ExchangeRate::ActiveRecord_Relation:0x0000010b434c78>

我很乐意在以下任何一个问题上提供帮助:

(1)如何更改matching_exchange_rate方法,使其使用两个输入参数?我尝试了很多不同的组合--其中之一在上面的注释代码中--但是到目前为止我还没有成功。

(2)如何从返回值访问exchange_rate?(例如,ActiveRecord_Relation)

预先感谢您的帮助,皮埃尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 02:16:02

您可以使用pluck选择具有提供条件的exchange_rate,如下所示:

代码语言:javascript
复制
def self.matching_exchange_rate(base_currency, target_currency_id)
  where(
    "base_currency_id = ? and currency_id = ?", base_currency,target_currency_id
  ).pluck(
    'exchange_rate'
  ).first
end

上面的代码是对注释掉方法的替换。就您发布的以下输出而言:

代码语言:javascript
复制
x_rate = #<ExchangeRate::ActiveRecord_Relation:0x0000010b434c78>

where返回一个ActiveRecord::Relation。您可以在AR查询中使用first方法获得对第一个ExchangeRate记录的引用,您本可以在该记录上调用exchange_rate,如下所示:

代码语言:javascript
复制
x_rate = ExchangeRate.matching_exchange_rate(user_currency_id).first.exchange_rate
puts "x_rate = " + x_rate.to_s
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24602167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档