2010-12-19 7 views
0

온라인에서 훌륭한 예제를 찾지 못해서 쉬운 질문을하므로 쉽게 대답 할 수 있습니다. 부드럽게 다루십시오. :)모델을 사용한 사용자 정의 유효성 검사 : 실패시 저장

나는 포스트 모델이 있습니다.

p = Post.find(1) 
p.title = "This is the Title of this Article" 
p.url_title = "this-is-the-title-of-this-article--created-by-user-name" 

게시가 생성되면 제목을 기반으로 : url_title이 생성됩니다. 이것은 지루하고 비 설명적인 ID를 노출하는 것이 아니라 데이터베이스에서 키를 끄는 방법입니다.

나는 이것을 빌드한다 : before_save에 url_title을 넣어서 valid_uniqueness_of를 사용할 수 없다. 왜냐하면 before_save가 시작되기 전에 검증이 수행되고, url_title이 유효성 검사를받는 것처럼 보이기 때문이다.

그래서, 다음을 보장해야합니다. url_title은 고유해야합니다. 다른 사용자의 동일한 제목을 여러 번 사용할 수 있도록 "--created-by-# {p.user.name}"을 추가합니다.

그래서 내가해야 할 일은 다음을 확인하는 사용자 지정 유효성 검사를하는 것입니다. url_title은 저장하기 전에 데이터베이스에 고유하며, 고유하지 않으면 사용자에게 알리고 사용자에게 알립니다.

가장 좋은 방법은 생각하나요? '

답변

1

사용이 그런

validate_uniqueness_of :url_title, :message => "This title is taken, please choose a different title" 
0

은 그냥 포스트 모델

+0

아차 url_title하기 위해 적절한 유효성 검사를 추가 url_title

before_validation_on_create :create_url_title .... private def create_url_title url_title = ..... end 

을 만들 수 있습니다. 나는 중요한 부분을 생략했다. 내 개정 된 게시물을 참조하십시오. –

2

당신은 before_save에서 before_validation에 콜백을 이동할 수 있습니다 (here 참조)

validates_uniqueness_of :url_title 

를 추가합니다. 이 콜백은 생성 및 업데이트 작업에서 실행되므로 사용자의 필요에 충분할 것으로 생각됩니다.

관련 문제