ruby-on-rails - 缩短 .each do 循环

标签 ruby-on-rails ruby

我有这个循环:

data.each do |variant|
code = prices[variant["vcode"].to_sym]
  if code.nil?
    reg = sell = sale = " "
  else
    reg = code[:reg]
    sell = code[:sell]
    sale = code[:sale]
  end
  variant["reg"] = reg
  variant["sell"] = sell
  variant["sale"] = sale

现在,我想缩短代码,就像我之前对 reg = sell = sale = "" 所做的那样:

reg = " "
sell = " "
sale = " "

我也想做

reg = code[:reg]
sell = code[:sell]
sale = code[:sale]

  variant["reg"] = reg
  variant["sell"] = sell
  variant["sale"] = sale

我试过这个:

  def price_values
    %i[reg sell sale]
  end

并替换

reg = code[:reg]
sell = code[:sell]
sale = code[:sale]

reg, sell, sale = code[price_values]

但它返回nil。我做错了什么?

最佳答案

data.each do |variant|
  code = prices[variant["vcode"].to_sym]
  %w|reg sell sale|.each do |e|
    variant[e] = code.nil? ?  " " : code[e.to_sym]
  end
end

或者,更好的是,使用默认哈希函数。

data.each do |variant|
  code =
    prices[variant["vcode"].to_sym] ||
    Hash.new { |h, k| h[k] = " " }

  %w|reg sell sale|.each do |e|
    variant[e] = code[e.to_sym]
  end
end

关于ruby-on-rails - 缩短 .each do 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57719928/

相关文章:

ruby - 什么是将大类分解为模块的好 ruby​​ 习惯用法?

ruby-on-rails - 如何使用 Rails 4 以一种形式添加多个多对多字段?

ruby-on-rails - 为什么在私有(private)部分中声明委托(delegate)方法时是公开的?

ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序

ruby - 获取 sinatra 应用程序以从虚拟机提供服务

arrays - 为正 n 和负 n 创建从 0 到 n 的数字数组

ruby-on-rails - RSpec 找不到嵌套资源的路由

mysql - 查询两个用户之间的公共(public)组

ruby-on-rails - 在 Rails 中设置 cookie 选项后如何修改它?

ruby-on-rails - 命名空间修改后表单损坏