2012-08-25 146 views
0

來自rails新手的另一個問題。我在rails 3.x中使用了mysql的friendly_id gem用於友好URL的導軌模型和控制器設計

這是一個設計問題(在rails中可能很容易)。我期待來自專家的建議。我正在構建一個庫列表應用程序。用戶可以通過「城市區域」或「城市」查看圖書館。例如:

我希望有像URL:

www.list.com/library/san-francisco-bay-area

www.list.com/library/ SAN的舊金山灣區域/帕洛 - 阿爾託/

在數據庫中,我有表:

library 
------- 
id, name, city_id, slug 

吶我在這裏重擊和city_id是FK

city 
---- 
city_id, name, metro_area_id, slug 

的名字在這裏猛擊和metro_area_id是FK

metro_area 
---------- 
metro_area_id, name, state, slug 

的名字在這裏猛擊

因此,當用戶點瀏覽器www.list.com/library/san-francisco-bay-area/palo-alto

我希望獲得san-francisco-bay-area/palo-alto的圖書館清單。但是我的圖書館表模型僅包含圖書館名稱的slu g。那麼如何解析這個URL來找到可以在庫模型和控制器中用來獲取列表的city_id。

請記住,我不能只依賴城市的名字。我將不得不找到'palo-alto'的city_id,其中位於地鐵'san-francisco-bay-area'。由於metro_area和city的slug位於其他表格中,因此設計模型和控制器的最佳方式是什麼。

控制器的顯示方法是:

def show 
    @user = Library.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @library } 
    end 
end 

和型號是

class Library < ActiveRecord::Base 
    attr_accessible :name, :city_id, :slug 
    extend FriendlyId 
    friendly_id :name, use: :slugged 
end 

這按我友好的URL要求將無法正常工作。所以我會感謝專家的建議:)

回答

0

也許你已經找到了你的解決方案,我也是新的鐵軌,所以我只是猜測這會奏效。

既然你想從兩個不同的模型顯示slu Since。我假設用來顯示IDS會像

www.list.com/libraries/:id/cities/:id/metro_areas/:id 

這可以通過編輯路徑文件中加入Nested Resources

至於只顯示像

www.list.com/library/:city_id/:metro_area_id 

兩個ID做的方式Rails指南將其稱爲Dynamic Segments

之後,它只是將id轉換爲slu matter的問題。

我還在FriendlyId的文檔中發現this這是針對你的情況。

希望它有幫助