ruby-on-rails - 从两个数据源创建哈希的最优雅方式

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

我有一个 building_table 和 api::building_table,我想默认使用 building_table 中的数据,但如果 building_table 中不存在数据,我想必须从 api::building_table 获取它。 问题是有些属性可能不存在于 building_table 中,但存在于 api building_table 中。每个表中也有不同名称的列。

这是我的示例代码

def get_building_info
  building = Building.find_by(id: params[:id])
  api_building = Api::Building.find_by(id: params[:id])
  building_hash = {}
  building_hash[:name] = building.name || api_building.name
  building_hash[:room] = building.room || api_building.room
  building_hash[:rent] = building.rent || api_building.monthly_fee
...
end

有没有更优雅的方式来做到这一点?顺便说一句,这是在我的 Controller 中。

最佳答案

通用方法,接受键列表作为参数:

def get_building_info(keys = %i[name room rent].zip(%i[name room fee]))
  building = Building.find_by(id: params[:id])
  api_building = Api::Building.find_by(id: params[:id])
  keys.map do |key, api_key|
    [
      key,
      building.attributes[key.to_s] || api_building.attributes[api_key.to_s]
    ]
  end.to_h
end

关于ruby-on-rails - 从两个数据源创建哈希的最优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55331597/

相关文章:

ruby 数组包含一个 id

ruby - 使用 headless Chrome 将 URL 列入黑名单

ruby-on-rails - 基于与其他模型的关联自动命名对象

ruby-on-rails-4 - rails_admin - 如何在 ListView 中按自定义字段排序

ruby-on-rails - form_for 第一个参数在 rails 4 中不能为 nil 或为空

ruby-on-rails - 可以安装双 Rails 吗?

ruby-on-rails - 未定义的方法 `persisted?' 与 Reform 和 Virtus 模型

ruby-on-rails - ruby on rails 的动态业务规则引擎

sql - Ruby ActiveRecord 关联在访问子项时生成错误

html - 无法提取 html 表格行