从ruby文档中我可以看到该load方法将proc作为arg而parse不是.还有其他区别吗?比方说,当我有一个JSON字符串时,我应该使用哪种方法将其转换为Ruby对象?
load(source,proc = nil,options = {}) 从JSON源加载ruby数据结构并返回它.源可以是类似于字符串的对象,类似IO的对象,也可以是响应read方法的对象.如果给出了proc,它将以任何嵌套的Ruby对象作为参数以深度优先顺序递归调用.要修改默认选项,也要传递可选选项参数.此方法是Marshal和YAML的加载/转储接口实现的一部分.别名为:restore
parse(source,opts = {}) 将JSON文档源解析为Ruby数据结构并返回它.
从DataMapper文档中,我认为至少需要调用四个函数才能进行数据库设置:
DataMapper.setup(:default, 'sqlite:///path/to/project.db')
DataMapper.finalize
DataMapper.auto_migrate!
DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud)
在许多DataMapper + Sinatra教程中,我了解到auto_migrate!并且auto_upgrade!不应该在每次在生产服务器上加载应用程序时调用它.但同时许多例子在sinatra应用程序的主ruby文件中调用这些函数,比如说app.rb,没有额外的检查.而一些例子根本不打电话finalize.到目前为止,我很困惑,我不知道在生产服务器上做什么.
以下是简单app.rb的例子,我有一些问题:
finalize被召集?db,生产服务器上没有文件,如何自动创建它?或者我必须project.db手动创建文件?auto_upgrade!被包装在:development块中,因此不会在生产服务器上调用它.当我在其中添加或删除列时,我应该如何升级数据库?require 'sinatra'
require 'data_mapper'
configure do
DataMapper.setup :default, "sqlite3://#{Dir.pwd}/project.db"
end
class Book
include DataMapper::Resource
property :id, Serial
property :title, Text
belongs_to :author
end
class Author
include DataMapper::Resource
property :id, Serial
property :name, Text
has n, :books
end
configure :development do
DataMapper.auto_upgrade!
end
get '/:id' do …Run Code Online (Sandbox Code Playgroud) 如果我将当前时间作为函数的参数传递,哪种方式是正确的,Date()或者new Date()?以下面的代码为例,哪一个更好?
function logTime(time) {
console.log(time);
}
//One
var now = new Date();
logTime(now);
//Two
logTime(new Date());
//Three
logTime(Date());
Run Code Online (Sandbox Code Playgroud)