2014-02-20 3 views
0

Как сделать такой маршрут?Рельсы 4 Маршруты Параметры необязательно

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.

И 0a для ввода нескольких позиций.



EDIT 01

мне нужно понять маршруты Value_something. И вернуться так:

param[:_something] = Values 

Ex: 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 - Несколько PARAMS в атрибуте

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

Ex: 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 

Ex: 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' 

Тогда в указательным действия вы хотите сделать что-то вроде

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 схемы. Я думаю, что было бы лучше, чтобы иметь все возможные варианты в качестве параметров, а не части самого пути, например, имеет URLs как

www.site.com/clothing?gender=men & типа = Футболки & марки = Nike & цена = 100-500 & цвет = красный, белый, синий

Это гораздо более традиционный способ делать вещи.

EDIT - переписывание выше обработки контроллер на стороне, чтобы сделать структуру 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

Смежные вопросы