如何在Roda中生成链接/路径/路径?

时间:2017-10-08 00:49:46

标签: ruby rack roda

如何在Roda的视图中生成路径或网址?我需要使用插件吗?如果没有,怎么回事?或者我是否需要硬编码网址/路径?

在Rails中,我这样做:

viewWillTransition(to size:with coordinator:)

2 个答案:

答案 0 :(得分:0)

由于link_to是一个Rails助手,您可以做的是使用anchor标记,并指定路由"手动"在href属性中。

我假设你已经定义了你的App(/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:关键字路由,需要定义它们。
  • [root]:路由的名称 - 与Rails中的alias选项一样。
  • GET:HTTP动词。
  • /: URI。

您可以看到更多here。然后,您可以使用roda-parse_routes可执行文件生成包含app.rb文件中定义的路由的json文件:

$ roda-parse_routes -f routes.json app.rb

这应该为您提供一个json文件,指定pathmethods和路由name,如:

# routes.json:
[{"path":"/","methods":["GET"],"name":"root"}]

现在,您可以使用listed_route方法获取路线并与之合作。

root.erb中指定的/views文件夹中创建render 'root'文件,在其中您可以添加achor标记,并在href属性中打印listed_route内容要求:root路线的{1}}方法,例如:

<a href="<%= listed_route(:root) %>">Root</a>

现在您可以在视图中访问您的路线。虽然重定向到同一条路线并没有多大意义,但是你可以创建一条新路线,只需在request.root之后获得一条路线,如:

# route[hello]: GET /hello
request.get 'hello' do
  @greeting = 'hello world'
  render 'hello'
end

期望呈现hello erb文件并提供@greeting实例变量。因此,在此文件中,您可以传递根路由并检查@greeting变量是否成功。

<a href="<%= listed_route(:root) %>">Root</a>
<%= @greeting %>

不要忘记再次运行roda-parse_routes命令来生成新路由。你应该看到类似的东西:

[{"path":"/","methods":["GET"],"name":"root"},{"path":"/hello","methods":["GET"],"name":"hello"}]

答案 1 :(得分:0)

要仅基于设置的语义生成url,您需要path plugin

用法看起来像这样:

App < Roda
  plugin :path

  path :post do |post|
    "/blog/#{post.id}"
  end
end

然后,在模板中,就像在Rails中使用something_path一样:

<a href="<%= post_path(@post) %>" class="btn"><%= @post.title %></a>