我正在使用以下内容尝试从数据库中返回一个值。
rate = @table_selection.constantize.where(age: quote_profile.age, risk_profile => true)
我使用变量来查找值age是1,而risk_profile是一个变量,其中包含一个字符串,表示列名为" standard_rate"存储为小数。我正在尝试查找该值。年龄在数据库中是唯一的。
然而,不是我得到的值,而是返回:
'Rate::ActiveRecord_Relation:0x007fe357c7a528'
这就是我要求的'其中'。
如何从我在where子句中引用的列中获取实际值?我需要这个,因为我想使用rate作为创建动作的输入......
架构表:
create_table "ten_year_term_rates", force: :cascade do |t|
t.integer "age"
t.decimal "standard_rate"
t.decimal "premium_rate"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
答案 0 :(得分:1)
As'#pluck'不适合你,尝试使用方法#map
。它将提供您稍后可以使用的返回值数组。
rate = @table_selection.constantize.where(age: quote_profile.age, risk_profile => true).map { |record| record.send risk_profile }
答案 1 :(得分:0)
rate = @table_selection.constantize.where("age = ? OR risk_profile = ?", quote_profile.age, true)
答案 2 :(得分:0)
我找到了一个解决方案,但必须在没有where子句的情况下完成。这是代码:
protected
find_by语句获取我正在寻找的号码(数据)然后我调用
rate_record = @table_selection.constantize.find_by(age: quote_profile.age)
这是一种在使用变量时调用方法的方法。我在这里得到了这个答案的想法:Can you use variables to reference table columns in Rails?
不确定为什么find_by有效,如果有人有更好的解决方案可以在一行中完成,我不知道为什么...