Tag: datamapper

使用Datamapper和Sinatra进行简单搜索

我对Ruby和后端开发很新。 话虽这么说,我正在尝试创建一个简单的搜索表单。 我使用Sinatra作为框架,使用Datamapper作为我的ORM。 做这个的最好方式是什么? 下面是我的架构我希望搜索操作同时搜索磁贴和类别。 require ‘sinatra’ require ‘datamapper’ DataMapper.setup(:default, “sqlite3://#{Dir.pwd}/cal.db”) class Event include DataMapper::Resource property :id, Serial property :title, String property :text, Text property :contact_name, String property :contact_email, String property :location, String property :event_start_time, String property :event_end_time, String property :category, String property :created_at, DateTime property :approved, Boolean, :default => false end DataMapper.auto_upgrade! post ‘/search’ […]

DataMapper有n通过资源DELETE(从关联中删除)不起作用

我有这两节课, class User include DataMapper::Resource property :id, Serial property :name, String has n :posts, :through => Resource end class Post include DataMapper::Resource property :id, Serial property :title, String property :body, Text has n :users, :through => Resource end 所以,一旦我有一个新post,如: Post.new(:title => “Hello World”, :body = “Hi there”).save 我在添加和删除关联时遇到严重问题,例如: User.first.posts << Post.first #why do I have […]

Ruby Datamapper表inheritance与关联

我开始学习Datamapper ,我喜欢它的是我可以用真正的inheritance来编写我的模型。 现在我想知道,如果有可能更加先进: class Event include DataMapper::Resource property :id, Serial property :begin, DateTime property :type, Discriminator end class Talk<Event property :title, String belongs_to :meeting end class Meeting<Event has n, :talks end 该代码无法为Talk创建:title列,显然,鉴别器列在这里没什么价值,因为从数据库视图来看, Talk和Meeting应该有单独的表。 因此,最后,我希望Talk和Meeting共享与Event定义的相同的属性,但可能具有其他属性并且具有0..1:n关系(会议可以有几个Talk Meeting Talk 。 )有没有办法在不重复列定义和/或放弃inheritance的情况下实现这一目标? 编辑 再举一个例子:我喜欢inheritance的部分是,可以单独查询一般Event 。 所以,当我想知道,如果有某些东西:begin日期,我不需要查看两个或更多表,但可以只查询Event表。 在某种程度上,以下结构可以满足我的需求。 class Event include DataMapper::Resource property :id, Serial property :begin, DateTime end class […]

Sinatra + Heroku + Datamapper使用dm-sqlite-adapter部署问题

出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。 请注意,当我打开任何URL时都会发生这种情况 – 而不是在git push本身。 我建立了默认的Facebook应用程序。 Gemfile: source :gemcutter gem “foreman” gem “sinatra” gem “mogli” gem “json” gem “httparty” gem “thin” gem “data_mapper” gem “heroku” group :production do gem “pg” gem “dm-postgres-adapter” end group :development, :test do gem “sqlite3” gem “dm-sqlite-adapter” end 数据映射器设置: # Setting up the database DataMapper.setup(:default, ENV[‘DATABASE_URL’] || “sqlite3://#{Dir.pwd}/data/mydatabase.db”) 打开任何URL时的相关日志片段: Starting process […]

有没有使用游标或智能提取的Ruby ORM?

我正在寻找一个Ruby ORM来取代ActiveRecord。 我一直在看Sequel和DataMapper。 它们看起来很不错,但它们似乎都不是基本的:当你不需要时,不要将所有内容都加载到内存中。 我的意思是我在ActiveRecord和Sequel上尝试了以下(或等效的)有很多行的表: posts.each { |p| puts p } 他们俩都记忆犹新。 它们似乎将所有内容加载到内存中,而不是在需要时获取内容。 我在ActiveRecord中使用了find_in_batches ,但这不是一个可接受的解决方案: ActiveRecord不是一个可接受的解决方案,因为我们遇到了太多问题。 为什么我的代码应该知道分页机制? 我很高兴配置页面大小的某个地方,但就是这样。 使用find_in_batches您需要执行以下操作: post.find_in_batches {| batch | batch.each {| p | 把p}} 但那应该是透明的。 那么有一个可靠的Ruby ORM可以正确获取吗? 更新: 正如Sergio所提到的,在Rails 3中你可以使用find_each ,这正是我想要的。 但是,由于ActiveRecord不是一个选项,除非有人能说服我使用它,所以问题是: 哪些ORM支持相当于find_each? 怎么做? 为什么我们需要一个find_each ,而find应该这样做,不应该吗?

自动记录DataMapper查询

我正在使用DataMapper在Sinatra上创建一个简单的应用程序。 我希望看到为我的各种链式查找器创建DM的查询等。 我试过了: DataMapper::Logger.new(STDOUT, :debug) 在我的configure do … end块中,在应用程序启动时加载的environment.rb文件中。 我也尝试过: DataMapper::Logger.new(‘log/my-app.log’, :debug) 不会通过浏览器或需要我的应用程序的irb会话从应用程序中获取日志语句。 我确实看到了应用程序启动消息。 我正在使用rackup config.ru在本地运行应用程序。 我错过了什么?

Windows上是否支持Datamapper的dm_mysql_adapter gem?

我想用Ruby发挥更多,目前似乎掌握了sinatra,但现在也希望从关系数据库中获取数据。 我倾向于将Mysql用于测试应用程序并尝试安装gems,但是当它尝试编译它所依赖的本机do_mysql gem时,我一直遇到exception。 我确实已经安装了原生扩展,并且它们对JSON gem工作得很好,我记得有一段时间在某处读取当前不支持windows的do_mysql,所以只是想知道是否仍然如此。 在Windows 7上使用ruby 1.9.2(通过ruby安装程序+本机扩展安装) 这是例外,它有助于: C:\dump\ruby\DataMapperTest\gems>gem install dm-mysql-adapter-1.2.0.gem Temporarily enhancing PATH to include DevKit… Building native extensions. This could take a while… ERROR: Error installing dm-mysql-adapter-1.2.0.gem: ERROR: Failed to build gem native extension. C:/Tools/Ruby192/bin/ruby.exe extconf.rb checking for my_global.h… no checking for mysql.h… no checking for main() in -llibmysql… no checking for […]

未定义的方法auto_upgrade! 将Sinatra / DataMapper应用程序推送到Heroku时

有没有人知道在Heroku的Bamboo堆栈上运行使用DataMapper的Sinatra应用程序所需的神奇咒语? Bamboo堆栈不包含任何预安装的系统gem,无论我尝试什么样的gem组合,我都会遇到此错误: undefined method `auto_upgrade!’ for DataMapper:Module (NoMethodError) 这就是我的.gems文件中的内容: sinatra pg datamapper do_postgres dm-postgres-adapter 这些是我将应用程序推送到Heroku时安装的依赖项: —–> Heroku receiving push —–> Sinatra app detected —–> Installing gem sinatra from http://rubygems.org Successfully installed sinatra-1.0 1 gem installed —–> Installing gem pg from http://rubygems.org Building native extensions. This could take a while… Successfully installed pg-0.9.0 1 gem installed […]

难以在Sinatra中访问validation错误

我有一个非常基本的forms,有一些非常基本的validation(虽然我需要稍后创建一个自定义validation…你明天可能会看到一个问题。= P),但我无法向用户显示validation错误。 这是我的主要Sinatra文件: $LOAD_PATH.unshift(File.dirname(__FILE__)) require ‘sinatra’ require ‘rubygems’ require ‘datamapper’ require ‘dm-core’ require ‘dm-validations’ require ‘lib/authorization’ DataMapper::setup(:default, “sqlite3://#{Dir.pwd}/entries.db”) class Entry include DataMapper::Resource property :id, Serial property :first_name, String, :required => true property :last_name, String, :required => true property :email, String, :required => true, :unique => true, :format => :email_address, :messages => { :presence => “You […]

database.yml和引用无效

我们刚刚将虚拟机升级到我认为相同的ruby配置(通过RVM …… Ruby 1.9.2,Rails 3.0.7,DataMapper 1.1.0)。 最大的区别是我们从MySQL 5.0到5.1。 出于某种原因,在我们的旧虚拟机上运行的完全相同的代码/ database.yml现在在我们尝试连接到数据库时的新代码上失败了。 问题是这个YAML: mysql_defaults: &mysql_defaults adapter: mysql encoding: UTF-8 username: user password: pass host: localhost development: <<: *mysql_defaults database: devdb production: <<: *mysql_defaults database: productiondb host: master.db.site.com 只是扩展到: “mysql_defaults” => { “adapter”=>”mysql”, “encoding”=>”UTF-8”, “username”=>”user”, “password”=>”pass”, “host”=>”localhost” }, “development” => { “adapter”=>”mysql”, “encoding”=>”UTF-8”, “username”=>”user”, “password”=>”pass”, “host”=>”localhost” }, “production” […]