【问题标题】:Undefined method `stringify_keys' for 1:Fixnum1:Fixnum 的未定义方法“stringify_keys”
【发布时间】:2014-04-05 16:03:53
【问题描述】:

我收到“NoMethodError: undefined method `stringify_keys' for 1:Fixnum,”错误,有什么建议吗?

def self.gen_group(name, score, units = {})
  transaction do
    g = Group.create(name: name)
    units.each do |name, number|
      g.members.create(unit_id: Unit.find_by(name: name.to_s).id, amount: number)
    end
    g               
  end   
end

我的方法调用:

g1 = Group.gen_group("Waldor's Slugs", :Pikeman => 5, :Archer => 4, :Wizard => 1)

【问题讨论】:

  • 很难说,但我注意到您有变量“名称”重叠。使用方法输入创建一次,然后在您迭代单元时创建第二次。
  • 尝试使用,g.members.create(unit_id: Unit.where(name: name.to_s).first.id, amount: number)
  • @manis 删除score(请参阅下面的回答)是否解决了您的问题?

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


【解决方案1】:

哈希:Pikeman => 5, :Archer => 4, :Wizard => 1 分配给score(方法中未使用)而不是units

如果您的意图是遍历 units.each 中的 :Pikeman => ... 哈希,则只需从方法签名中删除过时的 score

【讨论】:

    【解决方案2】:

    在你的方法调用中,尝试:

    g1 = Group.gen_group("Waldor's Slugs", "Pikeman" => "5", "Archer" => "4", "Wizard" => "1")
    

    我忘记了细节,但在 Rails 的一些地方,你不能依赖符号形式 (:Pikeman) 与哈希中的字符串形式 ("Pikeman") 互换。您可以尝试方法调用,看看是否还需要将值作为字符串发送。

    【讨论】:

    • 由于他使用name.to_s 将密钥转换为字符串,因此符号和字符串密钥的行为相同。此外,对于普通的 Hash,Symbol 和 String 键是永远不能互换的。为此,您必须使用 HashWithIndifferentAccess。
    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多