2012-03-31 3 views
2

У меня есть модель:Создание Mongoid документа из Hash

class Task 
    include Mongoid::Document 
    field :name, type: String 
    field :category, type: String 
    # .... 

И у меня есть метод, чтобы создать новые документы:

def self.create_task(hash) 
     Task.safely.create!(name: hash["name"], 
          category: hash["category"], 
          ...); 

Я просто интересно, если это возможно, чтобы упростить этот код и пройти Ruby Hash для создания!() метода Mongoid :: Document?

Что-то вроде этого:

Task.safely.create!(hash) 
+0

Я обновил мой вопрос. Извините за темную проблему. – demas

+0

выглядит как текущий 'mongoid' удаленный' # безопасно' метод для '# с' один. По крайней мере, это то, что я вижу в банкомате. – akostadinov

ответ

3

Это:

Task.safely.create!(name: hash["name"], category: hash["category"], ...) 

точно так же, как это:

Task.safely.create!({name: hash["name"], category: hash["category"], ...}) 

, который так же, как это:

h = { name: hash['name'], ... } 
Task.safely.create!(h) 

Таким образом, вы, вероятно, можете просто сделать это:

Task.safely.create!(hash) 

Когда вы делаете что-то вроде этого:

o.m(:a => 'b', :c => 'd') 

Рубина отмечает, что вы поставить Hash буквальным без обычной {...} упаковки и добавляет его для тебя; такого рода вещи работает в конце любого списка аргументов:

o.m(a, b, :c => 'd', :e => 'f') 

так же, как:

o.m(a, b, { :c => 'd', :e => 'f' }) 
+0

Спасибо. Мне стыдно. Я не понял, что это хэш. – demas

+0

@demas: Труднее всего увидеть знакомые вещи прямо перед вашим лицом :) –

Смежные вопросы