2014-02-20 48 views
0

這樣的路線怎麼樣?Rails 4路線Params(可選)

www.site.com/clothing/men/T-Shirts_type/Nike_brand/100-500_price/Red,White,Blue_color/ 
www.site.com/clothing/woman/Nike_brand/100-500_price/Red,White,Blue_color/ 

應始終以:

www.site.com/Sex/Type/Brand/Price/Color 

即使不插入所有可用的選項:

www.site.com/Type/Color 

的idenficador將始終_something

逗號可以輸入多個項目。



編輯01

我需要了解航線Value_something。 並返回這樣的:

param[:_something] = Values 

例如:01 - 一屬性

URL: site.com/clothing/men/T-Shirts_type 
param[:_type] = T-Shirts 

例如:02 - 兩個屬性

URL: site.com/clothing/men/T-Shirts_type/Nike_brand 
param[:_type] = T-Shirts 
param[:_brand] = Nike 

例如:03 - 兩個屬性,無需爲了

URL: site.com/clothing/men/Nike_brand/T-Shirts_type 
param[:_brand] = Nike 
param[:_type] = T-Shirts 

例如:04 - 在屬性多PARAMS

URL: site.com/clothing/men/Red,White,Blue_color 
param[:_color] = Red,White,Blue 

例如:05 - 所有的屬性與爲了

URL: site.com/clothing/men/T-Shirts_type/Nike_brand/100-500_price/Red,White_color 
param[:_type] = T-Shirts 
param[:_brand] = Nike 
param[:_price] = 100-500 
param[:_color] = Red,White 

例如:05 - 所有屬性,無需爲了

URL: site.com/clothing/men/Red,White_color/T-Shirts_type/100-500_price/Nike_brand 
param[:_color] = Red,White 
param[:_type] = T-Shirts 
param[:_price] = 100-500 
param[:_brand] = Nike 
+0

不可能明白你的問題。您想做什麼? –

+0

我不知道你是否可以利用像[Spree](http://spreecommerce.com/)這樣的現有電子商務平臺,而不是從頭開始編寫這些東西。我不認爲這是你遇到的第一個電子商務特有的挑戰,我想大多數這些問題可能已經被其他人解決了。 –

+0

@JasonSwett我不會創建一個電子商務系統,這只是一個例子。如果是的話,肯定會使用現成的服務。謝謝。 – Ricardo

回答

0

創建自定義路線爲每個不同的情況。例如

#in config/routes.rb 
get '/clothing/:sex/:option1/:option2/:option3/:option4/:option5', to: 'product#index' 
get '/clothing/:sex/:option1/:option2/:option3/:option4', to: 'product#index' 
get '/clothing/:sex/:option1/:option2/:option3', to: 'product#index' 
get '/clothing/:sex/:option1/:option2', to: 'product#index' 
get '/clothing/:sex/:option1', to: 'product#index' 

然後在你的index動作你要像做

options = [params[:option1], params[:option2], params[:option3], params[:option4], params[:option5]].reject(&:blank?) 
condition_strings = ["sex = #{params[:sex]}"] 
options.each do |option_string| 
    choices, category = option_string.split(" ") 
    condition_strings << "#{category} in (#{choices})" 
end 
conditions = condition_strings.map{|string| "(#{string})"}.join(" AND ") 
@products = Product.find(:all, :conditions => [conditions]) 

這麼說,我覺得這是一個非常可怕的URL方案。我認爲將所有不同的選項作爲參數而不是路徑本身的一部分會更好,例如有類似

www.site.com/clothing?gender=men & type = T-Shirts &品牌=耐克&價格= 100-500 &顏色=紅色,白色,藍色

這是一個更傳統的做事方式。

編輯 - 上述控制器端處理的改寫,讓你想要的PARAMS結構:

options = [params[:option1], params[:option2], params[:option3], params[:option4], params[:option5]].reject(&:blank?) 
options.each do |option_string| 
    choices, category = option_string.split("_") 
    params[category] = choices 
end 
+0

我願意接受建議。可以舉例說明這種格式嗎? – Ricardo

+0

我編輯了這個問題,包括使用的例子。 – Ricardo