我有一个 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/