作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个应用程序可以跟踪玩家在健身计划中的进度。所以每个玩家都有多个星期使用相同的 :week_id
Week_id 结合 belongs_to 关系是 Week 记录的复合主键。
但是,当我尝试创建属于不同玩家的具有相同 week_id 的两周时,我收到“column week_id is not unique”错误。
我觉得我走在正确的轨道上,因为当我想获取一周的记录时,它告诉我需要两个参数来获取它 - week_id 和 player_id。
我可能在这里遗漏了一些简单的东西。我希望你能告诉我。
require "rubygems"
require "json"
require "sqlite3"
require "data_mapper"
require "bigdecimal"
DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/prod.db")
DataMapper::Model.raise_on_save_failure = true
class Player
include DataMapper::Resource
property :name, String, :key => true
property :age, Integer
has n, :weeks
end
class Week
include DataMapper::Resource
property :week_id, Integer, :key => true
property :score, Integer
belongs_to :player, :key => true
end
DataMapper.finalize.auto_migrate!
@jack = Player.create(:name => "jack")
@jack.weeks.create(:week_id => 1)
@jill = Player.create(:name => "jill")
@jill.weeks.create(:week_id => 1)
最佳答案
看起来你已经想出了一个解决方案,但我会继续为后代发布另一个答案,因为我遇到了同样的问题。
似乎将“:player_name”声明为键属性以及“belongs_to”声明,您最终使用相同的 SQL 来创建表,但它也认识到 week_id 是组合键并且不需要是唯一的。 (DataMapper 似乎在跨“属性”和“属于”声明的复合键方面存在问题。)
class Week
include DataMapper::Resource
property :week_id, Integer, :key => true
property :player_name, String, :key => true
property :score, Integer
belongs_to :player, :key => true
end
生成以下 SQL 以创建表:
~ (0.000000) CREATE TABLE "weeks"("week_id"INTEGER NOT NULL, "player_name"VARCHAR(50) NOT NULL, "score"INTEGER, PRIMARY KEY("week_id", "player_name"))
并且您的示例代码可以正常运行
关于ruby - 复合主键仅用于访问记录,不用于在 data_mapper 中保存记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14390187/
我是一名优秀的程序员,十分优秀!