动态更新特定的rails属性

时间:2017-08-18 14:12:16

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

我有一个常量哈希P_FACT_MAP和前一个哈希product_params[:product_factors]的键数组。在P_FACT_MAP中,所有值都映射到另一个值或值数组,这些值是ProductFactor表的属性名称。

P_FACT_MAP = {
  :x => %w[something]
  :y => %w[something2, something]
  :z => %w[something 3, something1]
  ...
  ...
}

我尝试通过执行以下操作来更新动态属性值:

ProductFactor.v << product_params[:p_id]

完整的方法代码:

ProductFactor::P_FACT_MAP.collect.do |k, v|
  puts "Value #{v}"
  if product_params[:product_factors].include? k
     v.each do |f|
       @coach_recommendation_factor.send(f) << @coach.id
   end
end

但它没有识别属性名称v,我收到以下错误:

NoMethodError (undefined method `v' for #<Class:0x007f95de9b8180>)

是不是可以动态更新属性的值,还是我必须采用完全不同的方法来实现?

2 个答案:

答案 0 :(得分:1)

'v'不是您ProductFactor课程的方法。如果您尝试使用v中的变量|k, v|,请将ProductFactor.v替换为ProductFactor.send(v)

答案 1 :(得分:0)

我相信这一行应该是

ProductFactor::P_FACT_MAP.collect.do |k, v|

替换为

ProductFactor::P_FACT_MAP.each do |k, v|