首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对模型对象Ruby on Rails执行map方法

对模型对象Ruby on Rails执行map方法
EN

Stack Overflow用户
提问于 2016-01-26 21:46:47
回答 3查看 3.5K关注 0票数 1

我查询了@ingredient = Feed.find(params[:ingredient_id]),它返回了一个模型散列对象,如下所示

代码语言:javascript
运行
复制
< 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的响应中使用divide所有的float values。如果这听起来很恐怖,请原谅我:

我试图通过map/select组合来实现,但不能成功

EN

回答 3

Stack Overflow用户

发布于 2016-01-26 22:03:57

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

调用Feed.column_hash ->,您可以获取所有列信息

类似这样的东西(取决于你的数据库适配器)

代码语言:javascript
运行
复制
> 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_typecast_type的类名获取浮点型

因此,您可以获得浮动列

代码语言:javascript
运行
复制
float_columns = Feed.columns_hash.select { |_k, v| v.cast_type.class.name.include? 'Float' }

和除法

代码语言:javascript
运行
复制
feed = Feed.find(params[:ingredient_id])
float_columns.keys.each do |attr|
  feed[attr] = feed[attr] / 2 unless feed[attr].nil?
end
票数 3
EN

Stack Overflow用户

发布于 2016-01-26 22:07:37

尝试这样做:

代码语言:javascript
运行
复制
@ingredient.attributes.each do |key, value|
  if value.is_a? Float
    @ingredient[key] = value / 2
  end
end

这段代码遍历@ingredient对象的属性,如果属性是浮点型,则将其除以2,并将新属性值重新分配回@ingredient

票数 3
EN

Stack Overflow用户

发布于 2016-01-26 21:55:16

代码语言:javascript
运行
复制
@ingredient =    Feed.find(params[:ingredient_id]) 

@ingredient
  .attributes
  .symbolize_keys
  .delete_if { |k| [:updated_at, :created_at, :id, :ingredient].include?(k) }
  .map{ |k, v| { k => v.to_f / 2 } }

这将返回

代码语言:javascript
运行
复制
[{:cost_kg=>13.0}, {:d_m=>44.0}, {:c_p=>5.5}, {:m_e=>1606.0}, {:c_f=>1.15}, {:e_e=>1.05}, {:ash=>1.3}, {:ca=>0.0}, {:p=>0.16}, {:lys=>0.11}, {:met=>0.075}, {:trp=>0.085}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35015284

复制
相关文章

相似问题

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