如何从ActiveRecord关系的实例获取属性

时间:2017-11-03 14:06:53

标签: ruby-on-rails activerecord

我正在使用以下内容尝试从数据库中返回一个值。

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

3 个答案:

答案 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有效,如果有人有更好的解决方案可以在一行中完成,我不知道为什么...