-1
С postgreSQL, если сбой при сохранении, мы можем вернуться false value
.Как справиться с ошибкой при сохранении с помощью mongoid
Но с мангоидом разные.
Вы можете видеть, что я пытался сохранить новые записи, но получил Moped::Errors::OperationFailure
.
Но я не мог обработать ошибку при этом условном потоке, он никогда не переходит в состояние else
.
if @plan.save
flash[:info] = t('created_a_watch_list_successfully', scope: 'user_section')
else
flash[:alert] = t('plan_has_existing', scope: 'user_section')
end
консоль
7] pry(#<User::TravelOrganizerController>)> rtn = @plan.save!
MOPED: 52.9.119.51:27017 INSERT database=lazy_bird collection=plans documents=[{"_id"=>BSON::ObjectId('55cfd201506f63131f060000'), "is_enable"=>true, "from"=>"TAIPEI", "to"=>"TOKYO", "start_date"=>2015-11-16 00:00:00 UTC, "end_date"=>2015-11-21 00:00:00 UTC, "session"=>"all_day", "price"=>999.0, "user_id"=>BSON::ObjectId('55c61b64506f631cd2000000'), "updated_at"=>2015-08-15 23:58:01 UTC, "created_at"=>2015-08-15 23:58:01 UTC}] flags=[]
COMMAND database=lazy_bird command={:getlasterror=>1, :w=>1} runtime: 52.3300ms
Moped::Errors::OperationFailure: The operation: #<Moped::Protocol::Command
@length=73
@request_id=36
@response_to=0
@op_code=2004
@flags=[]
@full_collection_name="lazy_bird.$cmd"
@skip=0
@limit=-1
@selector={:getlasterror=>1, :w=>1}
@fields=nil>
failed with error 11000: "E11000 duplicate key error collection: lazy_bird.plans index: user_id_1_from_1_to_1_start_date_1_end_date_1 dup key: { : ObjectId('55c61b64506f631cd2000000'), : \"TAIPEI\", : \"TOKYO\", : new Date(1447632000000), : new Date(1448064000000) }"
See https://github.com/mongodb/mongo/blob/master/docs/errors.md
for details about this error.
from /Users/hsu-wei-cheng/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/moped-2.0.4/lib/moped/operation/read.rb:50:in `block in execute'
[8] pry(#<User::TravelOrganizerController>)> rtn
nil