【问题标题】:Mongoid giving error while saving field with particular nameMongoid 在保存具有特定名称的字段时给出错误
【发布时间】:2012-04-06 15:21:22
【问题描述】:

我在 Rails 应用程序中使用 mongoid。轨道 3.0.10 红宝石 1.9.2p0

当我尝试使用“test”、“link”、“desc”等字段时。

Content.new(:test => 'ggg')

Content.new(:link => 'ggg')

Content.new(:desc => 'ggg')

内容是使用“Mongoid::Document”的模型

它给出以下错误。 (此错误是针对字段“test”)

我认为 mongoid 使用了一些库,其内容高于字段名称作为函数

可能会产生问题。有什么办法可以解决这个问题。

ArgumentError: wrong number of arguments (0 for 2..3)
    from /usr/lib/ruby/gems/1.9.1/gems/activemodel-3.0.10/lib/active_model/dirty.rb:155:in `test'
    from /usr/lib/ruby/gems/1.9.1/gems/activemodel-3.0.10/lib/active_model/dirty.rb:155:in `attribute_will_change!'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes.rb:102:in `block (2 levels) in write_attribute'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes.rb:100:in `tap'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes.rb:100:in `block in write_attribute'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes.rb:170:in `assigning'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes.rb:98:in `write_attribute'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes/processing.rb:95:in `process_attribute'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes/processing.rb:25:in `block in process'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes/processing.rb:23:in `each_pair'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/attributes/processing.rb:23:in `process'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/document.rb:128:in `block in initialize'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/relations/builders.rb:47:in `building'
    from /usr/lib/ruby/gems/1.9.1/gems/mongoid-2.2.4/lib/mongoid/document.rb:125:in `initialize'
    from (irb):1:in `new'
    from (irb):1
    from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start'
    from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start'
    from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>'
    from /home/harshal/simple-cms/branches/1.0/script/rails:6:in `require'
    from /home/harshal/simple-cms/branches/1.0/script/rails:6:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

【问题讨论】:

  • 你也可以发布你的Content 模型吗?
  • 感谢 Jeff Smith 的回复。我忘了提到上面的字段是动态生成的,它不是在模型中预定义的。

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid


【解决方案1】:

使用最新的一切,ruby(1.9.3),rails(3.2.3),mongoid(2.4.7)我尝试了以下事情:

没有设置字段的模型,全是动态的:

class Content
  include Mongoid::Document
end

Rails 控制台:

1.9.3p125 :011 > c = Content.new(:test => "test", :link=> "link", :desc => "desc")
 => #<Content _id: 4f7f49f5add3617fae000003, _type: nil, test: "test", link: "link", desc: "desc"> 
1.9.3p125 :012 > c.save
 => true 
1.9.3p125 :013 > Content.first
 => #<Content _id: 4f7f49f5add3617fae000003, _type: nil, test: "test", link: "link", desc: "desc"> 
1.9.3p125 :014 >

所有字段都静态设置的模型:

class Content
  include Mongoid::Document
  field :test, :type => String
  field :link, :type => String
  field :desc, :type => String
end

再次使用 Rails 控制台:

Loading development environment (Rails 3.2.3)
1.9.3p125 :001 > c = Content.new
 => #<Content _id: 4f7f4652add3617ec4000001, _type: nil, test: nil, link: nil, desc: nil> 
1.9.3p125 :002 > c.test = 'tyler'
 => "tyler" 
1.9.3p125 :003 > c.save
 => true 
1.9.3p125 :004 > Content.first
 => #<Content _id: 4f7f4652add3617ec4000001, _type: nil, test: "tyler", link: nil, desc: nil>

【讨论】:

  • 嗨 Tyler Brock,问题是我的应用程序已经在使用 mongoid 2.2.4 和 rails 3.0.10 并且还安装了许多其他 gem。有什么办法可以继续使用这些 gem 而不是升级到最新的。因为有可能通过升级这些 gem,依赖于以前版本的 gem 可能会损坏。
  • 我不确定它是否是一个版本问题,但您应该能够将 mongoid 升级到最新版本而不会出现问题。您始终可以通过在 Gemfile 中指定特定版本来返回。我要做的是记下您当前拥有的内容,然后如果某些内容不起作用,则再次明确指定这些版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多