2012-09-18 2 views
0

내 경로를 자동차 (/ : country /)와 같은 식으로하고 싶습니다. car_id,이를 수행하는 가장 좋은 방법은 무엇입니까? "cars"만이 모든 자동차를 나열하고 "cars/: country"는 해당 국가에서 만들어진 모든 자동차를 나열합니다.경로에 두 번째 매개 변수를 추가하는 가장 좋은 방법

나는 car : path => "cars (/ : country)"와 같은 경로를 가지고 있으며 params [: country]가 검색 할 항목을 결정하기 위해 # index action을 차 안에서 체크인한다. 데이터베이스

내 솔루션이 잘못되거나 추악한 느낌이 들지만 최상의 솔루션과 가장 깨끗한 모델은 국가 모델을 만드는 것이지만 모든 정보를 정리하는 방법을 모르는 경우가 있습니까? 국가마다 슬러그가 있어야하며 car_id도 사용해야합니다 (car_id에 friendly_id 사용). 내가 알아 들었던 이름과 슬러그 thats와 함께 차 테이블을 가지고 있어야하는 것처럼 느낀다.

감사합니다.

답변

2

처음에는 현재 솔루션이 추한 것이 아니고 잘못이 아니라 최악의 경우 보행자라고합니다. 그러나 관련된 모든 모델과 협회를 보지 않고서는 일반적인 대답 만 할 수 있습니다.

먼저 국가 모델, 아마도 좋은 생각이지만 자동차 모델과 어떻게 관련이 있습니까?

이 작업을 수행 할 수 있습니다 :

class Country << ActiveRecord::Base 
    has_may :cars 
end 
class Car << ActiveRecord::Base 
    belongs_to :country 
end 

@cars = Country.find('USA').cars 

을 즉, 당신이 국가를 선택하고 특정 국가에 속한 모든 차량을 얻을 수에 의해 의미를 지원 OR 것

, 당신은 할 수

class Car << ActiveRecord::Base 
    has_one :country 
end 

class Country << ActiveRecord::Base 
end 

이렇게하면 다른 의미가 가능합니다.

@country = Car.find('Jeep').country 

점은 앱에있는 다음 앱의 의미가 의미를 지원하도록 연결을 정의하고자하는 쿼리의 의미를 생각하는 것입니다. 매우 간단한 연결을 게시했습니다. 여러 개의 복잡한 연결로 끝날 수도 있습니다. 데이터베이스 및 관련 모델을 쿼리하는 방법에 따라 달라집니다.

UPDATE

당신은 게시 : (: 국가//) : 가 내 경로를 자동차처럼 뭔가 할 car_id, 당신은 특정 car_id를 알고있는 경우, 이해가되지 않습니다

, 당신 필터링이나 추가 검색이 필요 없습니다.

사운드는 이러한 URL을 원하는 같이 :

/cars   # all cars 
/cars/:country # all cars in country 
/car/:id  # a specific car 

첫 번째와 세 번째 경로는 거기에 아마, 당신은 자동차 편안하고 경로의 전체 세트를 정의한 즉

설정/routes.rb 가정

resources :cars 

경로에 추가하기 만하면됩니다.RB :

GET '/cars/:country' => 'cars#index' 

그런 다음 응용 프로그램/컨트롤러/cars_controller.rb의 :

def index 
    if params[:country] 
    @cars = Car.where("country_id = ?", params[:country]) 
    else 
    @cars = Car.all 
    end 
end 

이 각 자동차 레코드가 country_id 속성이 이에 설정된 관계를 가정합니다. 즉, 예를 들어, 여러 가지 방법에 대해 올 수 있습니다 :

class Car < ActiveRecord::Base 
    belongs_to :country 
end 

내 차 테이블이 country_id 속성이 말한다, 나는 같은 것을 수행 할 수 있습니다

@car = Car.find (1001)

"차는 #{@car.country.name}에 있습니다."

+0

감사합니다. 것은 내가 길을 자동차/: 나라/: 자동차가되기를 바란다. 자동차가 국가 즉 국가/: 국가/자동차에 속하기 때문에 쉽게 할 수 있습니다. 그러나 내가 원하는 것을 원하지 않습니다. 내 응용 프로그램에 대한 importent 것은 URL 차가 모든 자동차 (자동차 # 색인), URL cars/: 카테고리가 특정 국가 (mabybe cars # by_country?) 및 ofcourse cars/: country/: 자동차의 모든 자동차를 표시한다는 것입니다. (cars # show). 국가 모델을 만드는 것이 가장 좋겠지 만 협회 및 경로에 가장 적합한 솔루션이 무엇인지 알 수 없습니까? –

+0

/cars/: 국가 및/자동차/: id도 작동 할 수 있습니다. 그 것이/cars/: country/: id는 더 많은 논리를 느낍니다. 사용자가/cars /로 이동하여 자동차를 선택하면/car/: id는 RESTful이라고 느낍니다. 그러나 사용자가/cars/: 국가로 이동하여 자동차를 선택하면/cars/: country/: id는 RESTful이라고 느낍니다. 가장 좋은 솔루션은 무엇입니까? 그리고 내가/cars/: country와 함께 간다면 어떻게 그걸 성취 할 수 있겠습니까? –

+0

내가 car/: id와 같은 단 하나의 액션에 대해 단 하나의 이름을 사용하는 것이 RESTful이 아니라는 것을 조사한 후에. 더 많은 아이디어를 환영합니다. –

관련 문제