2012-04-06 4 views
0

Ich benutze Mongoid in Schienen App. Schienen 3.0.10 Rubin 1.9.2p0Mongoid geben Fehler beim Speichern Feld mit bestimmten Namen

Wenn ich Feld wie "test" Ich versuche, "link", "ab" usw.

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

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

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

Content-Modell sagen ist, die verwendet "Mongoid :: Document"

gibt es folgenden Fehler. (Dieser Fehler ist für das Feld „test“)

Ich denke mongoid einige Bibliothek verwendet, welche Inhalte über Feldnamen als Funktionen, die

Problem schaffen könnten. Gibt es eine Möglichkeit, dieses Problem zu umgehen?

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

Könnten Sie posten Sie Ihre 'Content' Modell auch? –

+0

danke Jeff Smith für Ihre Antwort. Ich habe vergessen zu erwähnen, dass das obige Feld dynamisch erzeugt wird, es ist nicht im Modell vordefiniert. –

Antwort

1

das neueste alles verwenden, Rubin (1.9.3), Schienen (3.2.3), mongoid (2.4.7) habe ich versucht, die folgenden Dinge:

Modell ohne Set-Felder, die alle dynamischen :

class Content 
    include Mongoid::Document 
end 

Rails-Konsole:

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 > 

Modell mit allen statisch Satzfelder:

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

Rails-Konsole wieder:

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

Danke! Tyler Brock –

+0

Hallo Tyler Brock, das Problem ist, dass meine App bereits Mongoid 2.2.4 und Rails 3.0.10 verwendet und auch viele andere Edelsteine ​​installiert hat. Gibt es einen Weg, mit diesen Juwelen fortzufahren, statt sie auf den neuesten zu bringen? weil es möglich ist, dass durch das Aktualisieren dieser Perle der Edelstein, der von der vorherigen Version abhängt, brechen kann. –

+0

Ich bin mir nicht sicher, ob es ein Versions-Problem speziell ist, aber Sie sollten in der Lage sein, Mongoid einfach auf die neueste Version ohne Problem zu aktualisieren. Sie können immer zurückgehen, indem Sie eine bestimmte Version in der Gemdatei angeben. Was ich tun würde ist, notieren Sie, was Sie gerade haben und dann diese Versionen wieder explizit angeben, wenn etwas nicht funktioniert. –

Verwandte Themen