2012-09-18 60 views
0

我希望我的路線像汽車(/:country /):car_id,那麼最好的方法是什麼?只有「汽車」會列出所有的汽車,「汽車/國家」會列出在該國生產的所有汽車。爲路線添加第二個參數的最佳方式

現在我有我的路線喜歡這個資源:汽車,路徑=>「汽車(/:國家)」,我檢查汽車#索引行動,如果參數[:國家]是零,以確定將檢索什麼數據庫。

我的解決方案感覺不對和醜陋,我想最好的解決方案和最乾淨的將是一個國家的模型,但真的不知道如何組織起來,提示? 國家必須有一個slu and,所以也car_id(使用friendly_id car_id)。感覺就像我應該有一個名字和slu car的車表,這是我所想到的。

謝謝!

回答

2

首先我會說你目前的解決方案不是醜陋的,也不是錯的,最糟糕的是它是行人。但是,如果沒有看到所有涉及的模型和協會,我只能給出一個普遍的答案。

首先,一個國家模式,可能是一個好主意,但你如何將它與汽車模型聯繫起來?

你可以這樣做:

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}」

+0

謝謝。事情是,我想我的路線是汽車/:國家/:汽車。我可以輕鬆地做到這樣,汽車屬於一個國家,即國家/國家/:汽車,但那不是我想要完成的。 我的應用程序的重要內容是,只有網址車顯示所有的汽車(汽車#索引),URL汽車/:類別顯示所有來自特定國家(mabybe汽車#by_country?)和汽車/國家/:汽車(汽車#顯示)。 創建國家模型將是最好的,但我不知道什麼是最好的解決方案的協會和路線? –

+0

/cars /:country和/ car /:id也可以工作。事情是/ cars /:country /:id感覺更多邏輯。 如果用戶導航到/ cars /並選擇了一輛車,那麼/ car /:id會感覺RESTful。 但是,如果用戶導航到/ cars /:country並選擇了一輛車,那麼/ cars /:country /:id會感覺RESTful。什麼是最好的解決方案?如果我去/汽車/:國家我怎麼做到這一點? –

+0

經過一番研究,我發現只有一個動作像car /:使用一個單獨的名稱,但id不是RESTful。歡迎更多的想法。 –

相關問題