Jam*_*pen 0 ruby-on-rails mongodb mongoid
我正在尝试遵循Mongoid 3中的建议- 检查复合键的唯一性,以便在2个字段上具有唯一约束的模型.
id声明是这样的:
field :_id, type: String, default: &method(:generate_id)
private
def generate_id
user.id.to_s + offering.id.to_s
end
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,当我通过new实例化一个对象时它会有一个conniption因为它试图在它有用户和提供之前生成id而且它(正确地)不想使用id的id.我可以传入用户并提供构造函数参数,一切都很好.
我的问题是,这是正确的做法吗?考虑到为了得到一个独特的约束,我必须做的所有钝的古怪感觉都很脏.代码根本没有透露意图.有没有更好的办法?
使用普通的MongoDB,您可以使用JavaScript创建此索引(假设您的集合名称是注册):
db.registrations.ensureIndex( { "user_id": 1, "offering_id": 1 }, { unique: true } )
Run Code Online (Sandbox Code Playgroud)
要使用Mongoid生成此索引,请将其添加到模型中:
index({ user_id: 1, offering_id: 1 }, { unique: true })
Run Code Online (Sandbox Code Playgroud)
并运行rake db:mongoid:create_indexes.
如果你想保持你的生成_id与generate_id,你可以在代移动到一个before_validate回调.
field :_id, type: String
before_validate :generate_id
private
def generate_id
self._id ||= "#{user.id}:#{offering}"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |