从哈希创建Mongoid文档

时间:2012-03-31 17:34:06

标签: ruby mongodb mongoid

我有模特:

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 个答案:

答案 0 :(得分: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')

Ruby注意到你提供了一个没有通常{...}包装的Hash文字并为你添加它;这种事情在任何参数列表的末尾都有效:

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

与:

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