首先,我想说您当前的解决方案并不丑陋,也不是错误的,最坏的情况是行人。但是没有看到所有涉及的模型和关联,我只能给出一个笼统的答案。
首先,一个乡村模型,可能是个好主意,但你如何将它与汽车模型联系起来?
你可以这样做:
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
关键是要考虑您希望在您的应用程序中拥有的查询语义,然后定义您的关联以支持对您的应用程序有意义的语义。我发布了非常简单的关联,您最终可能会得到多个更复杂的关联,这取决于您需要如何查询数据库和关联的模型。
更新
您发布:我希望我的路线类似于汽车(/:国家/):car_id,
这没有任何意义,如果您知道具体的 car_id,则不需要任何过滤或额外搜索。
听起来你想要这些 URL:
/cars # all cars
/cars/:country # all cars in country
/car/:id # a specific car
假设您已经为汽车定义了全套 RESTful 路线,那么第一条和第三条路线可能就在那里,即
配置/路由.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
这表示我的汽车表有一个 country_id 属性,我可以执行以下操作:
@car = Car.find(1001)
“这辆车在#{@car.country.name}”