2013-08-29 2 views
0

사용자가 제품을 만들 때 해당 제품에 original_url 열의 임의 URL이 제공되는 Rails 애플리케이션을 사용하고 있습니다. 사용자는 나중에 맞춤 URL을 선택하여 custom_url에 저장합니다.두 개의 열이 서로 고유하고 서로 동일하다는 것을 확인하십시오.

원본 URL과 맞춤 URL 모두에서 제품에 액세스 할 수 있습니다. 나는 칼럼을 그들 자신 사이에서뿐만 아니라 서로간에 유지하는 방법을 알아낼 수 없다. 나는 :scope을 발견했다. 그러나 그것은 내가 염두에 두는 것을 이루지 못한다. 일어날 수없는 것을의

예 :

original_url: Ab | custom_url: nil

original_url: Bc | custom_url: Ab

일어날 수없는 것을 또 다른 예 :

original_url: Ab | custom_url: nil

original_url: Ab | custom_url: nil

일어날 수있는 일의

예 :

validate do 
    if Product.where(original_url: original_url, custom_url: original_url).size > 0 || 
    Product.where(original_url: custom_url, custom_url: custom_url).size > 0 
    errors.add(:base, 'Original url and custom url must be unique.') 
end 

:

original_url: Ab | custom_url: nil

original_url: Bc | custom_url: De

original_url: Gh | custom_url: nil

+0

무엇을 원하십니까? original_url == custom_url? –

+0

아니, 그건 내가 원하는 것이 아니야. 희망에 따라 내가 원하는 것을 더 분명하게하기 위해 질문을 업데이트했습니다 (예제가 추가되었습니다). – skimberk1

답변

1

아마 최선의 선택처럼, 사용자 정의 검증 블록/메소드를 작성하는 것입니다 또 다른 해결책은 URL에 대한 모델을 작성한 다음에 le을 작성하는 것입니다. t Producthas_many :urls.

1

슈퍼 간단한 해킹, 새로운 origina_url가 'ofoobar'될 것입니다 원래 ORIGINAL_URL이 '는 foobar'처럼, 6 자리 숫자, 고유 ORIGINAL_URL하는 접두사와 CUSTOM_URL

말을 추가하는 것입니다. custom_url이 생성되면 "cfoobar"인 "c"로 시작해야합니다.

이렇게하면 origina_url과 custom_url을 별도로 확인해야하며 일반적으로 접두어에 맞게 패턴을 추가하면됩니다.

관련 문제