【发布时间】:2010-08-03 02:34:09
【问题描述】:
我有一个包含多个文档的用户模型。每个文档的标题在用户范围内必须是唯一的。这按预期工作。
class Document < ActiveRecord::Base
has_many :documents, :dependent => :delete_all
end
class Document < ActiveRecord::Base
belongs_to :user
validates_presence_of :title
validates_uniqueness_of :title, :scope => :user_id
end
当我克隆一个文档时,我想确保它的标题是唯一的。 OSX 会将“副本”附加到在 Finder 中复制的文档。如果对象的名称以 'copy' 结尾,它将添加一个递增的数值,从 2 开始(例如 'foo copy 2')。我想重现这种行为。
看来我需要在 ResumeController 的复制操作中执行以下操作:
- 获取用户的文档集合
- 将标题提取到数组中
- 在数组中搜索新对象的标题
- 如果找不到标题,请保存对象
- 如果找到标题(可以是多个,例如'foo Copy'、'foo Copy 2'),将'Copy'附加到标题的末尾或增加数字。正则表达式模式 'Copy[ 0-9]*$' 似乎找到了正确的匹配项。
目前,复制逻辑在 ResumeController 中,但将其添加到 Document 模型中似乎更合适。
感谢任何建议。
【问题讨论】:
标签: ruby-on-rails-3 clone