2010-08-03 3 views
0

has_many Documents가있는 사용자 모델이 있습니다. 각 문서의 제목은 사용자 범위 내에서 고유해야합니다. 이것은 예상대로 작동합니다.Ruby/Rails 고유 이름 생성기

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의 복사 동작에서 다음을 수행해야 할 것 같다 :

  1. 사용자의 문서 컬렉션
  2. 새 개체의 배열을 검색 배열
  3. 에 제목을 추출 할 수 제목이 발견되지 않으면 제목이 발견되면
  4. 을 저장하고 ('foo Copy', 'foo Copy 2'와 같이 여러 개일 수 있음), 'Copy'를 끝에 추가하십시오 제목 또는 incr 번호를 기입하십시오. 정규식 패턴 'Copy [0-9] * $'는 정확한 일치를 찾는 것처럼 보입니다.

현재 사본 논리는 ResumeController에 있지만 문서 모델에 추가하는 것이 더 적절합니다.

모든 조언을 주시면 감사하겠습니다.

def controller_method_name 
    ... 
    title = params[:title] 
    d = Document.find(:first, :conditions => ["title = :title", {:title => title.strip}] 

    if !d.nil? 
    #your safe, no document with this title exists 
    else 
    #pass the title to the Document model and generate a new name 
    end 
    ... 
end 

당신은 아마 모델에 그 논리의 대부분을 이동하고, 컨트롤러가 될 수 :

답변

0

가장 쉬운 해결책은 'YYYYMMDDHHMMSS'가 날짜 - 시간 값으로 대체되는 파일 이름의 끝에 '복사 YYYYMMDDHHMMSS'를 추가하는 것입니다.

0

오히려 자신의 전체 문서 목록을 당겨하고 반복 것보다 더 좋은 방법은 발견 할 것이다 새로운 이름이 필요하거나 만들어지고 있다는 사실을 전혀 모르고 있습니다.

+0

찾기를 수행하면 도움이 될 것입니다. 그러나이 문제는 주요 문제를 해결하지 못합니다. 그것에 대한 생각이 있습니까? – craig