我有模特:
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 :(得分: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' })