Создать Mongoid документ из хэша - PullRequest
2 голосов
/ 31 марта 2012

У меня есть модель:

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)

1 Ответ

3 голосов
/ 31 марта 2012

Это:

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')

Ruby замечает, что вы предоставляете хеш-литерал без обычной оболочки {...}, и добавляет его длявы;Подобные вещи работают в конце любого списка аргументов:

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

- это то же самое, что:

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