2012-08-25 2 views
0

레일즈 뉴비의 또 다른 질문. 레일즈 3.x에서 mysql과 함께 friendly_id gem을 사용하고 있습니다.친절한 URL을위한 레일의 모델 및 컨트롤러 디자인

이것은 레일에서 쉽게 발생할 수있는 디자인 문제입니다. 레일 전문가의 조언을 기대합니다. 도서관 목록 앱을 만들고 있습니다. 사용자가 "대도시"또는 "도시"로 라이브러리를 볼 수있는 위치. 예를 들어 :

www.list.com/library/san-francisco-bay-area

또는

www.list.com/library/ :

내가 좋아하는 URL이하고자하는 샌프란시스코의 베이 지역/팔로 알토/데이터베이스에서

나는 테이블이 있습니다

library 
------- 
id, name, city_id, slug 

없음을 나 여기에 장타율하고 CITY_ID는

city 
---- 
city_id, name, metro_area_id, slug 

이름이 여기에 장타율과 metro_area_id 이름이 여기

장타율있다
metro_area 
---------- 
metro_area_id, name, state, slug 

FK

이다 FK이다 그래서 때 www.list.com에 대한 사용자 점 브라우저/library/san-francisco-bay-area/palo-alto

san-francisco-bay-area/palo-alto에있는 도서관 목록을보고 싶습니다. 하지만 내 라이브러리 테이블 모델에는 라이브러리 이름에만 슬러그가 포함되어 있습니다. 따라서이 URL을 구문 분석하여 라이브러리 모델과 컨트롤러에서 목록을 가져올 수있는 city_id를 찾는 방법.

도시 이름에만 의존 할 수는 없습니다. 나는 메트로 'san-francisco-bay-area'에있는 'palo-alto'의 city_id를 찾아야 할 것입니다. metro_area 및 city 용 슬러그가 다른 테이블에 있으므로 모델 및 컨트롤러를 설계하는 가장 좋은 방법은 무엇입니까? 컨트롤러의

표시 방법은 다음과 같습니다

def show 
    @user = Library.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @library } 
    end 
end 

및 모델 내 친화적 인 URL 요구 사항에 따라 작동하지 않습니다

class Library < ActiveRecord::Base 
    attr_accessible :name, :city_id, :slug 
    extend FriendlyId 
    friendly_id :name, use: :slugged 
end 

이있다. 따라서 전문가의 조언을 부탁드립니다.

답변

0

아마도 해결책을 찾았을 텐데, 나는 레일에 익숙하지 않을 수도 있습니다. 그래서 나는 이것이 잘 풀릴 것이라고 추측합니다.

두 가지 모델의 슬러그를 표시하고 싶으므로.나는 IDS 그냥

www.list.com/library/:city_id/:metro_area_id 

같은 두 개의 ID를 표시로서 Nested Resources

을 추가하여 경로의 파일을 편집을 통해 수행 할 수 있습니다

www.list.com/libraries/:id/cities/:id/metro_areas/:id 

같은 것이 표시하는 방법을 믿고있어 레일 가이드는 다음과 같이 설명합니다. Dynamic Segments

그런 다음 ID를 슬러그로 변환하는 것입니다.

또한 FriendlyId의 문서에서 this을 발견했습니다.이 설명서는 귀하의 사례를 다루고 있습니다.

희망 하시겠습니까?