J'ai un modèle de compte:Rails3, Mongoid, concombre. Impossible de définir le champ user_id: format ObjectId illégale
class Account
include Mongoid::Document
include Mongoid::Timestamps
referenced_in :user
end
et utilisateur:
class User
include Mongoid::Document
include Mongoid::Timestamps
...
references_one :account
...
end
Et le scénario suivant (je tente de mettre en association reference_one):
Scenario: Client views his account
Given the following accounts:
| user_id |
| 1123322131 |
.....
Et l'étape suivante:
Given /^the following accounts:$/ do |class_name, table|
table.hashes.each do |attributes|
Account.create(attributes)
end
end
Lorsque je tente de lancer le concombre, je reçois toujours une erreur:
illegal ObjectId format (BSON::InvalidObjectId)
./features/step_definitions/common_steps.rb:7:in `block (2 levels) in <top (required)>'
./features/step_definitions/common_steps.rb:6:in `each'
./features/step_definitions/common_steps.rb:6:in `/^the following accounts:$/'
features/manage_accounts.feature:8:in `And the following accounts:'
version complète de backtrace: https://gist.github.com/433ea982d876e1b1fa27
J'utilise: Rails 3.0.3, Ruby 1.9.2, le concombre 1.9. 4, machiniste 2, mongoïde. Mon Gemfile
Qu'est-ce que j'ai fait de mal?
UPD. Pas si évidemment le comportement:
> a = Account.create :user_id => "123"
BSON::InvalidObjectId: illegal ObjectId format
> a = Account.create :user_id => 123
=> #<Account _id: 4ceedf055e6f991aef000005, created_at: 2010-11-25 22:11:17 UTC, updated_at: 2010-11-25 22:11:17 UTC, user_id: 123>
> a = Account.create :user_id => "4ceede9b5e6f991aef000007"
=> #<Account _id: 4ceedf1b5e6f991aef000006, created_at: 2010-11-25 22:11:39 UTC, updated_at: 2010-11-25 22:11:39 UTC, user_id: BSON::ObjectId('4ceede9b5e6f991aef000007')>
Oui, vous avez raison, voir UPD La solution utilise des identifiants comme "4ceede9b5e6f991aef000007" – petRUShka
Je vous suggère d'utiliser un autre champ dans vos spécifications de concombre comme 'username' ou' email' pour identifier vos utilisateurs et laisser Mongoid créez les ID d'objet pour vous, c'est plus fiable et les spécifications de concombre sont plus lisibles – bowsersenior
J'ai essayé de comprendre de cette façon, ce serait génial, si vous m'aidez: http://stackoverflow.com/questions/4281386/rails- cucumber-make-object-et-ses-associations – petRUShka