Хотелось бы оставить свои взгляды СУХОЙ!Решение для разных маршрутов и хранения DRY
Описание проблемы:
Я успешно реализовал AJAX нумерации страниц, однако я должен использовать статические пути в приведенном ниже примере - с помощью root_path для «нагрузок больше продуктов» ссылки. Это нормально, когда пользователь посещает корневой URL-адрес, но, очевидно, ломается при посещении a/s/[имя_пользователя] или/c/[имя коллекции]
Я не могу концептуально обернуть голову вокруг того, что мне нужно сделать для рефакторинга это? Я хотел бы сохранить маршрут/t/s/c, если это возможно.
Любые мысли?
маршруты
root_path GET / products#tile
tag_view_path GET /t/:tag(.:format) products#tile
store_view_path GET /s/:store_slug(.:format) products#tile
collection_view_path GET /c/:collection_slug(.:format) products#tile
products_controller
def tile
# /t/:tag Show all by tag
# /s/:store_slug Show all by store
# /c/:collection_slug Show all by collection
# Nothing passed Show all by rank
if params[:tag]
# find by tag
# to be implemented
elsif params[:store_slug]
store = Store.friendly.find(params[:store_slug])
@products = store.products.paginate(:page => params[:page]).order('rank DESC')
respond_to do |format|
format.html
format.js
end
elsif params[:collection_slug]
collection = Collection.friendly.find(params[:collection_slug])
@products = collection.products.paginate(:page => params[:page]).order('rank DESC')
respond_to do |format|
format.html
format.js
end
else
@products = Product.paginate(:page => params[:page]).order('rank DESC')
respond_to do |format|
format.html
format.js
end
end
end
tile.html.erb (следующая ссылка на страницу)
<div><%= link_to 'Load More Products', root_path(:page => @products.next_page), :class => 'load-more-products', :remote => true if @products.next_page %></div>
tile.js.erb (JS, чтобы добавить ответ Ajax)
$('.column-holder').append('<%= escape_javascript(render partial: "product", collection: @products) %>');
$('a.load-more-products').attr('href', '<%= root_path page: @products.next_page %>');
маршруты в соответствии с просьбой
# product short URL /p/slug-name-for-title
match 'p/:product_slug', to: 'products#show', via: 'get', as: 'product_view'
# show products by tag /t/tagname
match 't/:tag', to: 'products#tile', via: 'get', as: 'tag_view'
# show products by store /s/store-slug-name
match 's/:store_slug', to: 'products#tile', via: 'get', as: 'store_view'
# show products by collection /c/collection-slug-name
match 'c/:collection_slug', to: 'products#tile', via: 'get', as: 'collection_view'
Не могли бы вы разместите ваши маршруты? –