我正在处理的Rails应用程序有一个exchange_rate表,在进行计算以将一种货币转换为另一种货币时,我希望访问该表。这张桌子是这样的:
id | base_currency_id | currency_id | exchange_rate |
---+------------------+-------------+---------------+
2 | 1 | 2 | 0.9345 |
3 | 1 | 3 | 0.5000 |exchange_rate模型如下所示:
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,如下所示:
x_rate = ExchangeRate.matching_exchange_rate(user_currency_id)
puts "x_rate = " + x_rate.to_s这在日志中显示为:
x_rate = #<ExchangeRate::ActiveRecord_Relation:0x0000010b434c78>我很乐意在以下任何一个问题上提供帮助:
(1)如何更改matching_exchange_rate方法,使其使用两个输入参数?我尝试了很多不同的组合--其中之一在上面的注释代码中--但是到目前为止我还没有成功。
(2)如何从返回值访问exchange_rate?(例如,ActiveRecord_Relation)
预先感谢您的帮助,皮埃尔
发布于 2014-07-07 02:16:02
您可以使用pluck选择具有提供条件的exchange_rate,如下所示:
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上面的代码是对注释掉方法的替换。就您发布的以下输出而言:
x_rate = #<ExchangeRate::ActiveRecord_Relation:0x0000010b434c78>where返回一个ActiveRecord::Relation。您可以在AR查询中使用first方法获得对第一个ExchangeRate记录的引用,您本可以在该记录上调用exchange_rate,如下所示:
x_rate = ExchangeRate.matching_exchange_rate(user_currency_id).first.exchange_rate
puts "x_rate = " + x_rate.to_shttps://stackoverflow.com/questions/24602167
复制相似问题