2012-04-06 30 views
0

我在rails應用程序中使用mongoid。軌3.0.10紅寶石1.9.2p0Mongoid給出錯誤,同時以特定名稱保存字段

當我試圖用現場像「測試」,「鏈接」,「說明」等

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

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

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

內容是使用模型「Mongoid :: Document」

它給出以下錯誤。 (此錯誤是現場「測試」)

我覺得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>' 
+1

你可以發佈你的'Content'模型嗎? – 2012-04-06 15:58:26

+0

感謝傑夫史密斯的迴應。我忘了提及上述字段是動態生成的,它不是在模型中預定義的。 – 2012-04-06 17:23:05

回答

1

採用了最新的一切,紅寶石(1.9.3),導軌(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> 
+0

謝謝!泰勒布洛克 – 2012-04-09 13:15:07

+0

嗨Tyler布洛克,概率是我的應用程序已經使用mongoid 2.2.4和軌道3.0.10,也有很多其他寶石安裝。有沒有辦法繼續這些寶石,而是升級到最新的寶石。因爲可能通過升級這些寶石,依賴於以前版本的寶石可能會破壞。 – 2012-04-09 14:08:16

+0

我不確定它是否具體版本問題,但您應該能夠將mongoid升級到最新版本而不會出現問題。您可以隨時在Gemfile中指定特定的版本。我會做的是記下你目前的狀況,然後再明確指出這些版本,如果有什麼不起作用的話。 – 2012-04-09 15:25:42

相關問題