我是Ruby的新手.我安装了DataMapper,我正在尝试安装dm-mysql-adapter-1.0.2 gem.但是当我尝试安装时,我收到以下错误.我正在使用ubuntu OS.
vinoth@vinoth-laptop:~/Downloads$ gem install dm-mysql-adapter-1.0.2 -- --with-mysql- lib=/usr/lib/mysql -- --with-mysql-conf=/usr/bin/mysql
WARNING: Installing to ~/.gem since /home/vinoth/gems and
/home/vinoth/gems/bin aren't both writable.
WARNING: You don't have /home/vinoth/.gem/ruby/1.8/bin in your PATH,
gem executables will not run.
Building native extensions. This could take a while...
ERROR: Error installing dm-mysql-adapter-1.0.2:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.8 extconf.rb --with-mysql-lib=/usr/lib/mysql -- --with-mysql- conf=/usr/bin/mysql
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably …Run Code Online (Sandbox Code Playgroud) 虽然我将以1:1的关系选择Ghost模式,但我不确定这是否足以构成1:n的关系.
例如,当我加载一个可能有一百个Item对象的Order对象时,我首先会给items属性赋值NULL.
问题是:
A)我应该分配NULL然后,在第一次访问items属性时查找该项的所有订单并加载所有这些订单?
B)或者我应该只加载一个只包含所有order_id的轻量级记录集,并加载100个Item Ghost对象,这些对象只设置了order_id,但其他一切都是NULL - 一旦访问了Item对象以从中获取更多细节,懒加载那个特定的Item对象数据?
对于传统的MySQL 5.1数据库,哪个ORM最适合使用新的Rails 3应用程序?我不希望对这个数据库进行迁移(尽管模式可能会不时发生变化),但我一定会写信给它.
我正在尝试在我的机器上安装DataMapper的dm-types
gem install dm-types
Run Code Online (Sandbox Code Playgroud)
我从RubyInstaller(1.9.3)安装了Ruby,我也安装了DevKit.(以及其他一些宝石,如sinatra,haml,dm-core和bcrypt-ruby).
但是,当我运行"gem install dm-types"时,会发生这种情况.
C:\Users\Lev>gem install dm-types
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
ERROR: Error installing dm-types:
ERROR: Failed to build gem native extension.
"C:/Program Files (x86)/Ruby/Ruby193/bin/ruby.exe" extconf.rb
creating Makefile
make
Makefile:172: warning: overriding commands for target `C:/Program'
Makefile:163: warning: ignoring old commands for target `C:/Program'
Makefile:172: warning: overriding commands for target `Files'
Makefile:163: warning: ignoring old commands for target `Files'
Makefile:215: *** multiple target patterns. Stop.
Gem …Run Code Online (Sandbox Code Playgroud) 由于某种原因,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
Run Code Online (Sandbox Code Playgroud)
数据映射器设置:
# Setting up the database
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/data/mydatabase.db")
Run Code Online (Sandbox Code Playgroud)
打开任何URL时的相关日志片段:
Starting process with command `bundle exec thin -R config.ru start -p 34984`
2012-01-18T15:11:55+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-sqlite-adapter (LoadError)
2012-01-18T15:11:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in …Run Code Online (Sandbox Code Playgroud) 作为一个学习练习,我正在使用Sinatra,Datamapper和RSpec构建练习应用程序.我正在使用这个模板,它基本上是上述所有的样板.
我遇到的问题是RSpec和Datamapper似乎配置的方式,每次运行测试数据库相关功能的规范时,这些测试直接更改我的开发数据库而不是测试数据库.
例如,我希望在运行其余规范之前创建一些数据库对象...
before(:all) {
Region.new(:country => "Canada", :country_code => "CA").save
ProductLine.new(:reference => "Molders").save
Product.new(:name => "The Black Molder").save
Cart.new(:price => 25.95).save
}
Run Code Online (Sandbox Code Playgroud)
然而,每次运行RSpec时,上述元素都会添加到我的开发数据库中.
为什么不生成测试数据库呢?如何让测试数据库正常工作?
除了Sinatra而不是Rails之外,这看起来与此问题非常类似.
如果有任何帮助,我的代码可以在这里看到.
建立:
Ruby on rails 3.2.2
Ruby 1.9.2
dataMapper 1.2.0
mongoid 2.4.8
mongoid_orderable 1.0.0
Run Code Online (Sandbox Code Playgroud)
获得keys must be strings or symbols使用mongoid_orderable时错误.
我认为这与我使用的dataMapper有关,除了mongid(使用dataMapper从其他服务器移植数据)
我注意到dataMapper和mongoid之间的冲突,因为它们都使用各种方法扩展Symbol,asc,desc等.这可能是同样的问题吗?
如果有任何帮助,这是我的stacktrace的片段:
keys must be strings or symbols
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/bson-1.6.2/lib/bson/bson_c.rb:24:in `serialize'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/bson-1.6.2/lib/bson/bson_c.rb:24:in `serialize'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/collection.rb:436:in `update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/master.rb:25:in `block in update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/retry.rb:29:in `retry_on_connection_failure'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/master.rb:24:in `update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collection.rb:149:in `update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid_orderable/mongoid/contexts/mongo.rb:6:in `inc'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid_orderable/mongoid/criteria.rb:1:in `inc'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid/orderable.rb:125:in `apply_position'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid/orderable.rb:85:in `add_to_list'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activesupport-3.2.2/lib/active_support/callbacks.rb:419:in `block in _run__3008157942946527494__save__4591629889417243504__callbacks'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activesupport-3.2.2/lib/active_support/callbacks.rb:215:in `block in _conditional_callback_around_742'
Run Code Online (Sandbox Code Playgroud)
mongoid_orderable的当前实现如下:
class MyModel
include Mongoid::Document
include Mongoid::Orderable
default_scope order_by(:position => :asc)
end
Run Code Online (Sandbox Code Playgroud)
我很确定它与基于stacktrace的_mongoid_orderable_有关,并且如果我注释掉_mongoid_orderable_相关的行,它就可以工作.此处也提出了一个问题
我在codeigniter的控制器中使用以下查询.
$u -> where('us_email_id', $username);
$u -> where('us_password', $password1);
$details = $u -> get();
$total = count($details);
echo $total; echo "<br>";
echo count($details);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,"$ u"是数据映射器"User"的类"User"的对象名,其中我的数据库中的表名是"users".我想看看执行查询后返回了多少行.即使用户ID和密码不匹配,"$ total"也始终显示1.我想要的是,如果行数返回1则"ok"否则"出错".我知道它的基本但如果有人知道那么请帮助我.提前致谢.
php codeigniter datamapper codeigniter-2 codeigniter-datamapper
我正在从头开始编写一个新的网站项目.该项目在C#中,但我的背景是在PHP中(下面的伪代码有点混合,试图简洁和声明).
问题
我需要从两个地方之一检索配置数据 - 有时从本地数据库,有时从Soap服务.我应该能够从任一源创建同一组Model对象.
数据存储在不同数据源中完全不同的结构中 - 需要从Soap端拼凑出几个不同的Soap响应,而DB结构更接近于我在代码中构建模型对象的方式.
配置由对象树组成:产品包含属性,其中包含选项,这些选项具有应用时间的条件.
目标
我想尽可能地分开关注点(希望能够促进测试/维护/扩展能力):
问题
我知道各种各样的设计模式(虽然我不完全确定我完全理解它们).我向程序员提出了一个与此类似的问题,得到了关于Persistence Ignorance(更多信息)和Repository模式的回复,它们似乎都是来自Microsoft世界的概念.
据我所知,"Persistence Ignorance"只是让Model对象对你的数据存储机制一无所知的概念,而Repository模式看起来与Data Mapper模式非常相似,只不过它可能更像是一个外观,隐藏更多实际发生的事情.
所以我的问题是:
在Data Mapper模式中,每个Model对象应该有一个Mapper吗?而不是一个整个配置树?
因此,我应该有一个使用所有Mapper对象的配置树构建对象吗?
class ConfigBuilder() {
public ConfigBuilder (productMapper, propertyMapper, optionMapper, conditionMapper) {
// save them into local properties
}
public Products() {
var products = productMapper.FetchAll();
foreach (var product in products) {
AddProperties(product);
}
return …Run Code Online (Sandbox Code Playgroud) c# model-view-controller design-patterns data-access-layer datamapper
我正在开发一个 Sinatra 应用程序,我想在其中使用 data_mapper 和 sqlite3。在 app.rb 我有:
require 'sinatra'
require 'data_mapper'
Run Code Online (Sandbox Code Playgroud)
在控制台中,当我执行 $ gem list 我得到(list 稍微编辑以反映 db gems:
* LOCAL GEMS *
activemodel (4.0.2)
activerecord (4.0.2)
activerecord-deprecated_finders (1.0.3)
activesupport (4.0.2)
addressable (2.3.5)
arel (4.0.2)
atomic (1.1.14)
bcrypt-ruby (3.1.2)
bigdecimal (1.2.3)
buftok (0.2.0)
builder (3.1.4)
bundler (1.5.3)
bundler-unload (1.0.2)
cookiejar (0.3.0)
daemons (1.1.9)
data_mapper (1.2.0)
data_objects (0.10.13)
descendants_tracker (0.0.3)
dm-aggregates (1.2.0)
dm-constraints (1.2.0)
dm-core (1.2.1)
dm-do-adapter (1.2.0)
dm-migrations (1.2.0)
dm-serializer (1.2.2)
dm-sqlite-adapter (1.2.0)
dm-timestamps (1.2.0)
dm-transactions (1.2.0)
dm-types (1.2.2) …Run Code Online (Sandbox Code Playgroud)