首先我會說你目前的解決方案不是醜陋的,也不是錯的,最糟糕的是它是行人。但是,如果沒有看到所有涉及的模型和協會,我只能給出一個普遍的答案。
首先,一個國家模式,可能是一個好主意,但你如何將它與汽車模型聯繫起來?
你可以這樣做:
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
的關鍵是看你想在你的應用程序,然後定義協會支持,對您的應用程序有意義的語義查詢語義。我發佈了非常簡單的關聯,最終可能會出現多個更復雜的關聯,這取決於您需要如何查詢數據庫和相關模型。
UPDATE
您發佈的評論: 我希望我的路線是這樣的車(/:國家/):car_id,
這沒有任何意義,如果你知道具體car_id,你不需要任何過濾或額外的搜索。
聽起來像你想這些網址:
/cars # all cars
/cars/:country # all cars in country
/car/:id # a specific car
第一和第三的路線可能是有假設你已經定義了一整套汽車REST風格的路線,即
的config/routes.rb中
resources :cars
你只需要添加到路線。RB:
GET '/cars/:country' => 'cars#index'
然後在app /控制器/ 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}」
謝謝。事情是,我想我的路線是汽車/:國家/:汽車。我可以輕鬆地做到這樣,汽車屬於一個國家,即國家/國家/:汽車,但那不是我想要完成的。 我的應用程序的重要內容是,只有網址車顯示所有的汽車(汽車#索引),URL汽車/:類別顯示所有來自特定國家(mabybe汽車#by_country?)和汽車/國家/:汽車(汽車#顯示)。 創建國家模型將是最好的,但我不知道什麼是最好的解決方案的協會和路線? –
/cars /:country和/ car /:id也可以工作。事情是/ cars /:country /:id感覺更多邏輯。 如果用戶導航到/ cars /並選擇了一輛車,那麼/ car /:id會感覺RESTful。 但是,如果用戶導航到/ cars /:country並選擇了一輛車,那麼/ cars /:country /:id會感覺RESTful。什麼是最好的解決方案?如果我去/汽車/:國家我怎麼做到這一點? –
經過一番研究,我發現只有一個動作像car /:使用一個單獨的名稱,但id不是RESTful。歡迎更多的想法。 –