2017-10-27 12 views
1

Rails 5 앱에서 FriendlyId & Ancestry Gem을 사용하고 있습니다. 내 기본 서비스에 대한 사일로 마케팅 페이지를 만들고 별도의 상위 경로에있는 중복 슬러그를 만들어야합니다. 참조 용으로 초기 시드 파일을 아래에 포함 시켰습니다. 당신이 볼 수 있듯이FriendlyId 및 Ancestry Gem in Rails에서 중복 슬러그 허용 5

, 내 루트 경로는 다음과 같습니다

www.mysite.com 
www.mysite.com/events 
www.mysite.com/events/san-diego 
www.mysite.com/events/orange-county 
www.mysite.com/events/los-angeles 
www.mysite.com/events/riverside 

** 여기에 내가 필요로 중복 슬러그 ** 슬러그 중복이 있지만 당신이 볼 수 있듯이

www.mysite.com/events/san-diego/birthday-parties 
www.mysite.com/events/orange-county/birthday-parties 
www.mysite.com/events/los-angeles/birthday-parties 
www.mysite.com/events/riverside/birthday-parties 
... 

, 그들은 다른 부모 경로 떨어져 앉는다. 상위 슬래그를 기반으로 슬러그의 유효성을 검사하여 중복 슬러그를 만들 수있는 방법은 무엇입니까?

** dB/seeds.rb **

home = Page.create(title: 'Home') 

# home/events 
events = Page.create(title: 'Events', parent: home) 

# home/events/cityPage 
san_diego = Page.create(title: 'San Diego', parent: events) 
orange_county = Page.create(title: 'Orange County', parent: events) 
los_angeles = Page.create(title: 'Los Angeles', parent: events) 
riverside = Page.create(title: 'Riverside', parent: events) 

# home/events/san-diego/eventPage 
Page.create(title: 'Birthday Parties', parent: san_diego) 
Page.create(title: 'School Events', parent: san_diego) 
Page.create(title: 'Church Events', parent: san_diego) 
Page.create(title: 'Corporate Events', parent: san_diego) 
Page.create(title: 'Social Events', parent: san_diego) 
Page.create(title: 'Community Events', parent: san_diego) 

# home/events/orange-county/eventPage 
Page.create(title: 'Birthday Parties', parent: orange_county) 
Page.create(title: 'School Events', parent: orange_county) 
Page.create(title: 'Church Events', parent: orange_county) 
Page.create(title: 'Corporate Events', parent: orange_county) 
Page.create(title: 'Social Events', parent: orange_county) 
Page.create(title: 'Community Events', parent: orange_county) 

# home/events/los-angeles/eventPage 
Page.create(title: 'Birthday Parties', parent: los_angeles) 
Page.create(title: 'School Events', parent: los_angeles) 
Page.create(title: 'Church Events', parent: los_angeles) 
Page.create(title: 'Corporate Events', parent: los_angeles) 
Page.create(title: 'Social Events', parent: los_angeles) 
Page.create(title: 'Community Events', parent: los_angeles) 

# home/events/riverside/eventPage 
Page.create(title: 'Birthday Parties', parent: riverside) 
Page.create(title: 'School Events', parent: riverside) 
Page.create(title: 'Church Events', parent: riverside) 
Page.create(title: 'Corporate Events', parent: riverside) 
Page.create(title: 'Social Events', parent: riverside) 
Page.create(title: 'Community Events', parent: riverside) 

** 중복 슬러그에 추가 된 해시 **을 보여주는 데이터베이스의 스크린 샷

enter image description here

답변

1

당신은 validates_uniqueness_of 사용할 수 있습니다 범위와.

예 :

validates_uniqueness_of :slug, scope: :parent_id 

이 방법을 수행, 그것은이 레코드의 고유성을 확인하지만, PARENT_ID 다른

경우 같은 슬러그 허용