这样的路线如何?
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
Ex:02 - 两个属性
URL: site.com/clothing/men/T-Shirts_type/Nike_brand
param[:_type] = T-Shirts
param[:_brand] = Nike
Ex:03 - 两个没有订单的属性
URL: site.com/clothing/men/Nike_brand/T-Shirts_type
param[:_brand] = Nike
param[:_type] = T-Shirts
Ex:04 - 属性中的多个参数
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)
为每个不同的案例制作自定义路线。例如
#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'
然后在您的索引操作中,您将要执行类似
的操作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])
那就是说,我认为这是一个非常糟糕的网址架构。我认为将所有不同的选项作为参数而不是路径本身的一部分会更好,例如有像
这样的网址www.site.com/clothing?gender=men&type=T-Shirts&brand=Nike&price=100-500&color=Red,White,Blue
这是一种更常规的做事方式。
编辑 - 重写上述控制器端处理,以创建所需的参数结构:
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