标签: ruby-datamapper

如何在Ruby DataMapper中使用事务?

我有一个类,它执行存储在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中的代码,但我无法弄清楚如何在此上下文中使用它.

ruby ruby-datamapper

2
推荐指数
1
解决办法
3222
查看次数

DataMapper - 单表继承

有人可以向我解释这里发生了什么吗?

这是一个我放在一起展示你们最新情况的例子:

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)

ruby single-table-inheritance sinatra ruby-datamapper

2
推荐指数
1
解决办法
983
查看次数

为什么datamapper不更新记录/检测肮脏?

我最近想写一个简单的迁移脚本.我写:

@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.我错过了什么?

ruby database migration datamapper ruby-datamapper

2
推荐指数
1
解决办法
416
查看次数

如何从DataMapper :: Collection获取原始SQL?

我正在使用最新版本的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,因为我不确定我是否可以编写安全查询.

我也很乐意以另一种方式归档我的目标,我愿意接受全新的建议;)

ruby postgresql ruby-datamapper

2
推荐指数
1
解决办法
1262
查看次数

一对一的DataMapper关联

我是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模型中完成此操作?我是否必须在验证中自行执行检查?

ruby datamapper ruby-datamapper

2
推荐指数
1
解决办法
583
查看次数

ruby datamapper如何在查询中包含具有n个关联的子关联

假设我有一个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之前手动将它们添加到属性哈希中.

ruby ruby-datamapper

2
推荐指数
1
解决办法
911
查看次数

将原始 SQL 查询的结果转换为 JSON(和 CSV)

我需要从旧版 SQL Server 数据库中提取数据并将其转换为 JSON。我已经编写了 SQL 查询(对于旧版本的报告,我正在替换)可以准确地提取我需要的内容。

将 ActiveRecord 对象转换为 JSON(和 CSV)当然很容易,但我看不出有什么好方法可以做我需要做的事情,因为所有涉及原始 SQL 的 ActiveRecord 方法似乎都旨在返回 ActiveRecord 对象,并且这些数据在逻辑上不一定对应于一个类,我不需要将它保存在任何额外的地方。我只想执行 SQL 查询并返回 JSON 和 CSV 并完成它。

ruby activerecord ruby-on-rails sequel ruby-datamapper

2
推荐指数
1
解决办法
4492
查看次数

Sinatra:'/ route'中的NameError,未定义的局部变量或方法

我正在尝试为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 sinatra nameerror ruby-datamapper

0
推荐指数
1
解决办法
1092
查看次数