ruby-on-rails - 在 Ruby on Rails 模型对象上执行 map 方法

标签 ruby-on-rails ruby ruby-on-rails-4

我查询了 @ingredient = Feed.find(params[:ingredient_id]) 并返回了一个模型哈希对象,例如

< Feed id: 1, ingredient: "Sorghum, Grain", cost_kg: 26.0, d_m: 88.0, c_p: 11.0, m_e: 3212.0, c_f: 2.3, e_e: 2.1, ash: 2.6, ca: nil, p:
0.32, lys: 0.22, met: 0.15, trp: 0.17, created_at: "2016-01-26 12:54:05", updated_at: "2016-01-26 12:54:05">

我想在 2 的响应中对所有 float values 进行除法。如果听起来令人毛骨悚然,请原谅我:P

我尝试通过 map/select 组合来实现,但没有成功

最佳答案

可以通过columns_hash方法获取float类型

调用Feed.column_hash -> 你可以得到所有的列信息

类似的东西,(取决于您的数据库适配器)

> Reservation.columns_hash['price_amount']
=> #<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x007fd0ca931a78
 @array=false,
 @cast_type=
  #<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Float:0x007fd0b235d420
   @limit=nil,
   @precision=nil,
   @scale=nil>,
 @default=nil,
 @default_function=nil,
 @name="price_amount",
 @null=true,
 @sql_type="double precision">

可以通过sql_type或者cast_type的类名获取float类型
所以,你可以得到 float 列

float_columns = Feed.columns_hash.select { |_k, v| v.cast_type.class.name.include? 'Float' }

和划分

feed = Feed.find(params[:ingredient_id])
float_columns.keys.each do |attr|
  feed[attr] = feed[attr] / 2 unless feed[attr].nil?
end

关于ruby-on-rails - 在 Ruby on Rails 模型对象上执行 map 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35015284/

相关文章:

Ruby:计数器、计数和递增

ruby - 如何在 Sequel 的 where 语句中使用 json 字段?

html - 如何将背景颜色应用于整个类区域

ruby-on-rails - "has_many :through"通过与 STI 的多态关联关联

ruby-on-rails - Rails 3.2 仅在更新或添加属性时保存回调

javascript - 图片资源可用于 CSS 文件而不是 JS 文件——为什么?

javascript - 将 ruby​​ 代码与 js.coffee 脚本混合

ruby-on-rails - Ruby 线程池——我做错了什么?

ruby - Puppet 4.3.2 客户端节点无法通过 SSL 连接到 Puppet 服务器

ruby-on-rails - 多对多 : has_many :through and User table relation issue in rails 4