Как я могу сгенерировать ссылку / маршрут / путь в Roda?
Как я могу сгенерировать путь или URL в представлении в Roda? Нужно ли использовать плагин? Если нет, то как еще? Или мне придется жестко кодировать URL-адреса / пути?
В Rails я бы сделал так:
<%= home_about_path %>
2 ответа
Чтобы просто генерировать URL на основе заданной семантики, вам нужен плагин path.
Использование выглядит примерно так:
App < Roda
plugin :path
path :post do |post|
"/blog/#{post.id}"
end
end
А потом, в ваших шаблонах так же, как вы бы использовали something_path
в рельсах:
<a href="<%= post_path(@post) %>" class="btn"><%= @post.title %></a>
Как link_to
является помощником Rails, что вы можете сделать, это использовать anchor
и указание маршрута "вручную" в пределах href
приписывать.
Я полагаю, у вас есть ваше приложение (/app.rb
) класс уже определен.
Чтобы получить ваши маршруты, вы можете использовать плагин roda-route_list и добавить его (как обычно с плагином), а также добавить render
Плагин и указать движок - в данном случае эрб, я думаю, проще и быстрее:
class App < Roda
plugin :route_list
plugin :render, engine: 'erb'
После создания вашего первого маршрута вы должны добавить комментарий над ним, указав имя, методы, URI и / или параметры и т. Д., В данном случае это просто корневой путь, который отвечает на запрос GET:
# route[root]: GET /
request.root do
render 'root'
end
Это # route[root]: GET /
:
route
: ключевое слово route, необходимое для их определения.[root]
: название маршрута - как в Railsalias
вариант.GET
: глагол HTTP/
: URI.
Вы можете увидеть больше здесь. Тогда вы можете использовать roda-parse_routes
исполняемый файл для создания файла JSON с маршрутами, определенными в вашем app.rb
файл:
$ roda-parse_routes -f routes.json app.rb
Это должно дать вам файл JSON с указанием path
, methods
и маршрут name
, лайк:
# routes.json:
[{"path":"/","methods":["GET"],"name":"root"}]
Теперь вы можете использовать listed_route
способ получить свой маршрут (ы) и работать с ними.
Создать root.erb
файл в пределах /views
папка как указано в render 'root'
и внутри него вы можете добавить ачор тег, а в атрибуте href распечатать содержимое listed_route
Метод с просьбой :root
маршрут, как:
<a href="<%= listed_route(:root) %>">Root</a>
Теперь у вас есть доступ к вашим маршрутам в ваших представлениях. Хотя перенаправление на тот же маршрут не имеет особого смысла, вы можете создать новый маршрут, просто GET один после request.root
, лайк:
# route[hello]: GET /hello
request.get 'hello' do
@greeting = 'hello world'
render 'hello'
end
Который ожидает рендеринга hello
Эрб файл и делает доступным @greeting
переменная экземпляра. Таким образом, в этом файле вы можете пройти корневой маршрут и убедиться, что переменная @greeting успешно работает.
<a href="<%= listed_route(:root) %>">Root</a>
<%= @greeting %>
Не забудьте запустить roda-parse_routes
снова введите команду для создания новых маршрутов. Вы должны увидеть что-то вроде:
[{"path":"/","methods":["GET"],"name":"root"},{"path":"/hello","methods":["GET"],"name":"hello"}]