まず、あなたの現在の解決策は醜いものでも間違っているものでもありません。最悪の場合、それは歩行者です。しかし、関連するすべてのモデルと関連付けを確認しないと、一般的な回答しかできません。
まず、カントリーモデル、おそらく良いアイデアだと思いますが、それを自動車モデルとどのように関連付けますか?
あなたはこれを行うことができます:
class Country << ActiveRecord::Base
has_may :cars
end
class Car << ActiveRecord::Base
belongs_to :country
end
それは、国を選択し、特定の国に属するすべての車を取得できるセマンティクスをサポートします。
@cars = Country.find('USA').cars
または、次のようなこともできます。
class Car << ActiveRecord::Base
has_one :country
end
class Country << ActiveRecord::Base
end
これにより、別のセマンティックが有効になります。
@country = Car.find('Jeep').country
重要なのは、アプリに必要なクエリ セマンティクスを考えてから、アプリにとって意味のあるセマンティクスをサポートする関連付けを定義することです。私は非常に単純な関連付けを投稿しました。データベースと関連付けられたモデルをどのように照会する必要があるかによって、複数のより複雑な関連付けになる可能性があります。
アップデート
あなたが投稿した: ルートを cars(/:country/):car_id, のようなものにしたい
特定の car_id を知っていれば、フィルタリングや追加の検索は必要ありません。
次の URL が必要なようです。
/cars # all cars
/cars/:country # all cars in country
/car/:id # a specific car
1 番目と 3 番目のルートは、自動車用の RESTful ルートの完全なセットを定義したと仮定すると、おそらくそこにあります。
config/routes.rb
resources :cars
routes.rb に以下を追加するだけです:
GET '/cars/:country' => 'cars#index'
次に app/controllers/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
つまり、私の car テーブルには country_id 属性があり、次のようなことができます。
@car = Car.find(1001)
「車は #{@car.country.name} にあります」