Как я могу сгенерировать ссылку / маршрут / путь в 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]: название маршрута - как в Rails alias вариант.
  • 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"}]
Другие вопросы по тегам