如何循环模型属性并将其用作其他符号

时间:2014-03-08 21:49:21

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

我正在尝试遍历ActiveModel::Model中的attr_accessor-able变量,然后根据它们从db中获取相应的记录,问题是它没有找到记录。

class DeployOptionForm
  include ActiveModel::Model
  attr_accessor :revision_number
end

这是我试图获得它们的代码。

dof.instance_variables.each do |var_sym|
  dof_var = dof.instance_variable_get(var_sym)
  var_sym.to_s.slice!(0).to_sym
  doe = DeployOption.new
  doe.value = dof_var
  doe.deploy_option_type = DeployOptionType.find_by name: var_sym
  doe.deploy = @deploy
  doe.save
end

我知道如果我这样做 doe.deploy_option_type = DeployOptionType.find_by name: :revision_number
记录被发现很好,但我试图让它更具适应性。

那么我需要做些什么var_sym才能DeployOptionType.find_by name: var_sym

2 个答案:

答案 0 :(得分:1)

var_sym.to_s.slice!(0).to_sym没有做任何事情。 var_sym就像你做完这一切之前的那样。

您需要var_sym = var_sym.to_s.slice(0).to_sym

答案 1 :(得分:1)

解决了!

结束必须这样做

    var_sym = var_sym.to_s
    var_sym.slice!(0)
    var_sym = var_sym.to_sym

编辑: 实际上这是一个更好的解决方案,并在一行中完成!

var_sym = var_sym.to_s.slice(1..-1).to_sym