我有一个类,它执行存储在YAML文件中的SQL语句(更新,插入和删除).我希望所有的陈述都是一次交易的一部分.如果任何SQL语句失败,那么它们将被回滚.如果所有语句都成功,那么它们将被提交.我正在连接MySQL数据库.这是我的代码:
require 'dm-core'
class SqlExecuter
def initialize(input_yaml_file_name)
@input_yaml_file_name = input_yaml_file_name
@adapter = DataMapper.repository(:default).adapter
@sql_statements = YAML::load(File.open(input_yaml_file_name))
end
def execute()
puts "Executing SQL statements in #{@input_yaml_file_name} file...."
@sql_statements.each do | sql_statement |
@adapter.execute(sql_statement)
end
end
end # class SqlExecuter
Run Code Online (Sandbox Code Playgroud)
我想让所有@ adapter.execute调用成为一个事务的一部分.我查看了dm-transactions gem中的代码,但我无法弄清楚如何在此上下文中使用它.
有人可以向我解释这里发生了什么吗?
这是一个我放在一起展示你们最新情况的例子:
class Person
include DataMapper::Resource
property :id, Serial
property :type, Discriminator
property :name, String
property :age, Integer
end
class Male < Person
end
class Father < Male
property :job, String
end
class Son < Male
end
class Female < Person
end
class Mother < Female
property :favorite_song, String
end
class Daughter < Female
end
DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud)
如果我打电话给Person.all我:
Person.all
=> [#<Son @id=1 @type=Son @name="Mike" @age=23 @status=nil>,
#<Son @id=2 @type=Son @name="Carlos" @age=12 @status=nil>,
#<Father @id=3 @type=Father @name="Robert" @age=55 @job=<not loaded>>, …Run Code Online (Sandbox Code Playgroud) 我最近想写一个简单的迁移脚本.我写:
@entries = Entries.all(:text => /test/)
@entries.each do |entry|
entry.update(:text => entry.text.gsub!(/test/, "no-test"))
end
Run Code Online (Sandbox Code Playgroud)
它没有保存记录,即使update语句返回true.我错过了什么?
我正在使用最新版本的postgresql,ruby和datamapper.
我创建一个这样的查询:
collection = Entry.all(:id => 2..4, :text => /test/)
Run Code Online (Sandbox Code Playgroud)
collection是一个DataMapper::Collection对象.DataMapper::Query只需调用就可以获得对象query = collection.query.但是如何以字符串形式获取查询的原始SQL?
我需要它,因为我必须自定义原始SQL(我需要SELECT DISTINCT而不是仅SELECT),但我不想完全自己编写SQL,因为我不确定我是否可以编写安全查询.
我也很乐意以另一种方式归档我的目标,我愿意接受全新的建议;)
我是DataMapper的新手,我正在尝试为以下场景创建模型:
我有很多用户(用户名,密码等),也可以是玩家或裁判,或者两者兼而有(因此不能选择单表继承).基础模型将是:
class User
include DataMapper::Resource
property :id, Serial
# Other user properties go here
end
class Player
include DataMapper::Resource
property :id, Serial
# Other player properties go here
# Some kind of association goes here
end
class Referee
include DataMapper::Resource
property :id, Serial
# Other referee properties go here
# Some kind of association goes here
end
DataMapper.finalize
Run Code Online (Sandbox Code Playgroud)
不过,我不确定添加到播放器和裁判的关联类型.有了belongs_to :user,多个玩家可以与同一个用户相关联,这在我的上下文中没有意义.在RDBMS术语中,我想我想要的是对玩家和裁判员表中的外键的唯一约束.
我如何在DataMapper模型中完成此操作?我是否必须在验证中自行执行检查?
假设我有一个Articlen Comments.如何使用DataMapper在一个查询中抓取文章中的所有注释?
类似下面的错误代码:
Article.get(:id).include(:comments).to_json
Run Code Online (Sandbox Code Playgroud)
我希望在json中返回相关的注释,如下所示:
{
article object
comments: [
{ comment object },
{ comment object }
]
}
Run Code Online (Sandbox Code Playgroud)
似乎必须有一个比抓取注释更好的方法,并在调用to_json之前手动将它们添加到属性哈希中.
我需要从旧版 SQL Server 数据库中提取数据并将其转换为 JSON。我已经编写了 SQL 查询(对于旧版本的报告,我正在替换)可以准确地提取我需要的内容。
将 ActiveRecord 对象转换为 JSON(和 CSV)当然很容易,但我看不出有什么好方法可以做我需要做的事情,因为所有涉及原始 SQL 的 ActiveRecord 方法似乎都旨在返回 ActiveRecord 对象,并且这些数据在逻辑上不一定对应于一个类,我不需要将它保存在任何额外的地方。我只想执行 SQL 查询并返回 JSON 和 CSV 并完成它。
我正在尝试为cms网站建立一个管理员后端.
这是我的应用程序的结构
??? app.rb
??? Gemfile
??? models
? ??? models.rb
??? routes
? ??? routes.rb
??? views
??? categories.erb
??? # ... other view files
Run Code Online (Sandbox Code Playgroud)
app.rb
require 'sinatra'
require 'data_mapper'
require 'dm-core'
require 'dm-migrations'
require 'digest'
enable :sessions
DataMapper.setup(:default, 'mysql://username:password@localhost/database')
require './models/models.rb'
require './routes/routes.rb'
DataMapper.finalize
Run Code Online (Sandbox Code Playgroud)
models.rb
class Category
include DataMapper::Resource
property :id, Serial
property :name, String
has n, :posts
end
# other model definitons
Run Code Online (Sandbox Code Playgroud)
我在routes.rb中定义了categories一条路线
...
get '/categories' do
@categories = Category.all
erb :categories
end …Run Code Online (Sandbox Code Playgroud) ruby ×8
datamapper ×2
sinatra ×2
activerecord ×1
database ×1
migration ×1
nameerror ×1
postgresql ×1
sequel ×1