/ / Trasy w szynach 4 z czystymi parametrami w adresie URL - ruby-on-rails, ruby, routing

Trasy w szynach 4 z czystymi parametrami w url - ruby-on-rails, ruby, routing

Jak działa routing w szynach 4? To, co staram się osiągnąć, to takie adresy URL:

..../categories/<name of category>

kiedy obecnie otrzymam:

..../categories?utf8=✓&category=dingus

HTML to:

<%= form_tag(categories_path, :method => "get") do %>
<%= select_tag "category", options_for_select(@categories, params[:category]), {onchange: "this.form.submit();", prompt: "Select Category"} %>
<% end %>

i takie trasy:

 get "/" => "<controller>#h"
get "categories" => "<controller>#categories"

Wiem, że mogę użyć gem friendly_id do stylizacjiurl z kategorii /: id do kategorii /: kategoria. Ale utknąłem na początkowym etapie zrozumienia tras. Próbowałem wielu rzeczy, ale jest to bardzo zagmatwane. Wszelkie pomysły lub sugestie będą bardzo mile widziane!

Dzięki!

Odpowiedzi:

0 dla odpowiedzi № 1

Zobacz Przewodnik routingu, a konkretnie w sekcji Zasoby.

Gdybyś miał w swoim routes.rb:

resources :categories

Możesz użyć pomocnika formularza, takiego jak:

<%= form_tag(categories_path, :method => "get") do %>
<%= select_tag "category", options_for_select(@categories.map {|c| [c.name, category_path(c)]}, params[:category]), {onchange: "window.location.href = this.value;", prompt: "Select Category"} %>
<% end %>

Jeśli w twoim Category model, który dodałeś to_param definicja:

class Category < ActiveRecord::Base
def to_param
name
end
end

Wtedy wszystkie Twoje adresy URL będą zgodne z Twoimi oczekiwaniami, .../categories/books. The url_for pomocnicy wygenerują dla Ciebie odpowiednie adresy URL:

assert category_path(@book_category) == "/categories/book"

Widzieć ActiveRecords :: Integrations # to_param dokumentacja więcej.


0 dla odpowiedzi nr 2

Nie mogłem uruchomić dokładnego rozwiązania Sama @categories jest pochodną tablicy unikalnych kategorii w modelu Post:

@categories = Post.pluck(:category).uniq

więc przy niewielkiej zmianie działa to tak:

erb:

<%= form_tag do %>
<%= select_tag "category", options_for_select(@categories.map {|c| [c, show_category_path(c)]}, params[:category]), {onchange: "window.location.href = this.value;", prompt: "Select Category"} %>
<% end %>

routes.rb:

get "/categories/:category" => "posts#categories", as: "show_category"

kontroler

def categories
@posts = Post.where(category: params[:category])
end

Więc URL to: /categories/dingus. Mam teraz problem z wyświetlaniem spacji jako% 20 (np. /categories/dingus%20burger, ale to już inna sprawa i podejrzewam, że metody to_param lub url_for w tym pomogą

Ten samouczek był dla mnie bardzo pomocny, aby trochę lepiej zrozumieć trasy: https://www.youtube.com/watch?v=16Bk_0RADLQ