您是否已从ActiveRecord重构为DataMapper模式?什么条件促使开关?我主要对基于Web的应用程序感兴趣,但想知道在任何环境中这种移动所带来的挑战.
我有一个模型,称为交付:
property :id, Serial
property :created_at, DateTime
property :updated_at, DateTime
property :price, BigDecimal, :precision => 10, :scale => 2
Run Code Online (Sandbox Code Playgroud)
交付有一个价格,在SQLite中查看的价格是5.49,6.95,4.95等
在输出中显示此信息(以haml编码)时,来自delivery.price的值显示为0.695E1,0.495E1等
知道为什么他们以这种格式显示,以及如何最好地正确显示它们.
所有帮助表示赞赏!
我怎样才能恢复测试任务?
背景故事: 我没有从默认的新rails项目开始.我正在使用带有dm-rails的datamapper并使用他们的boodstrap命令:
rails new project_name -m http://datamapper.org/templates/rails.rb
Run Code Online (Sandbox Code Playgroud)
我的Rakefile如下:
require File.expand_path('../config/application', __FILE__)
require 'rake'
MyAppName::Application.load_tasks
Run Code Online (Sandbox Code Playgroud) 我有一个外部数据库,正在向我提供信息.一个将其数据保存为本机GUID格式,而我的其他数据源提供标准.NET GUID格式字符串.
有没有一种整洁的方式从Native GUID转换为GUID结构?
还有任何验证位来确定提供的值是否为Native GUID?如果有的话我似乎找不到任何东西.
区别如下:
typedef struct _GUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
Run Code Online (Sandbox Code Playgroud)
Data1,Data2和Data3的字节顺序相反,但Data4保持不变,请参阅http://en.wikipedia.org/wiki/Globally_unique_identifier了解更多信息
我正在使用datamapper和dm-contraints设置我的数据库模型.我有两个模型有很多关系,但是当我试图销毁一个时,我得到的唯一信息是false.
是否有可能获得datamapper给我更多的反馈,哪个关系正是导致问题?
我有以下代码:
module DataMapper
module Resource
@@page_size = 25
attr_accessor :current_page
attr_accessor :next_page
attr_accessor :prev_page
def first_page?
@prev_page
end
def last_page?
@next_page
end
def self.paginate(page)
if(page && page.to_i > 0)
@current_page = page.to_i - 1
else
@current_page = 0
end
entites = self.all(:offset => @current_page * @@page_size, :limit => @@page_size + 1)
if @current_page > 0
@prev_page = @current_page
end
if entites.size == @@page_size + 1
entites.pop
@next_page = (@current_page || 1) + 2
end
entites
end
end
Run Code Online (Sandbox Code Playgroud)
结束
然后我打电话给#paginate:
@photos …Run Code Online (Sandbox Code Playgroud) 我希望能够在我的数据库中放置条目,其中制造商将被多次代表但不是制造商和型号的相同组合.所以"索尼(制造商),电视(型号)"还可以"索尼(制造商),OtherTv(型号)",但第三个条目"索尼(制造商),电视(型号)"自制造商和型号组合以来并不合适不是唯一的.我尝试了:key => true验证,但似乎没有用.而且我不能像validates_uniqueness_of :manufacturer AND :model我猜的那样做.你是怎么做到的?
class Tvs
include DataMapper::Resource
property :id, Serial
property :manufacturer, String, :key => true
property :model, String, :key => true
validates_uniqueness_of :
end
Run Code Online (Sandbox Code Playgroud) 我不久前问了一个类似的问题:使用数据映射器模式,实体(域对象)应该知道Mapper吗?但是,它是通用的,我真的很感兴趣如何用Doctrine2专门完成一些事情.
这里有一个简单的例子模型:每个Thing可以有Vote从User,一个User可投一个以上Vote,但只有最后Vote计数.因为其他数据(Msssage等)与之相关Vote,当Vote放置第二个数据时原始Vote不能只是更新,需要更换.
目前Thing有这个功能:
public function addVote($vote)
{
$vote->entity = $this;
}
Run Code Online (Sandbox Code Playgroud)
并Vote负责建立关系:
public function setThing(Model_Thing $thing)
{
$this->thing = $thing;
$thing->votes[] = $this;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,确保User只有最后一次Vote计数是Thing应该确保的东西,而不是一些服务层.
所以要在模型中保留它,新Thing功能:
public function addVote($vote)
{
foreach($this->votes as $v){
if($v->user === $vote->user){
//remove vote
}
}
$vote->entity = …Run Code Online (Sandbox Code Playgroud) 我无法确定为什么我在这里收到名称错误.我是DataMapper的新手,但尝试关联.任何帮助表示赞赏.
用户:
class User
include DataMapper::Resource
property :id, Serial, :key => true
property :first_name, String
property :last_name, String
property :company, String
property :city, String
property :country, String
property :mobile_number, Integer
property :email_address, String
property :shahash, String
property :isRegistered, Boolean
belongs_to :event, :required => true
end
DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud)
事件:
class Event
include DataMapper::Resource
property :id, Serial, :key => true
property :name, String
property :occuring, DateTime
has n, :user
end
DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud) 我可以在Heroku上启动一个基本的应用程序,显示带有'/'的消息......工作得很好.但是,每当我尝试使用datamapper添加sqlite时,事情就会崩溃.
要查看我的应用程序结构,请查看github上的项目.我保持代码相当简陋.
在heroku的日志中我得到:
2011-06-26T21:28:36+00:00 app[web.1]: /app/.bundle/gems/ruby/1.9.1/gems/dm-core-1.1.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-postgres-adapter (LoadError)
Run Code Online (Sandbox Code Playgroud)
关于这一点的是我没有使用postgres,所以我很困惑为什么这么说.
datamapper ×10
ruby ×6
sinatra ×4
.net ×1
activerecord ×1
doctrine-orm ×1
guid ×1
haml ×1
heroku ×1
jruby ×1
rake ×1
refactoring ×1
sqlite ×1
validation ×1
vb.net ×1