Ruby Sinatra模板内的If语句
我只想在特定路线/页面上显示消息。本质上,如果接通/路由,则显示一条消息 我试着翻阅Sinatra的文档,但找不到具体的方法。有没有一种Ruby方法可以让这一切顺利进行 编辑:下面是我想做的一个例子Ruby Sinatra模板内的If语句,ruby,sinatra,Ruby,Sinatra,我只想在特定路线/页面上显示消息。本质上,如果接通/路由,则显示一条消息 我试着翻阅Sinatra的文档,但找不到具体的方法。有没有一种Ruby方法可以让这一切顺利进行 编辑:下面是我想做的一个例子 get '/' do erb :index end get '/page1' do erb :page1 end get '/page2' do erb :page2 end ******************* <!-- Layout File -->
get '/' do
erb :index
end
get '/page1' do
erb :page1
end
get '/page2' do
erb :page2
end
*******************
<!-- Layout File -->
<html>
<head>
<title></title>
</head>
<body>
<% if this page is 'page1' do something %>
<% else do something else %>
<% end %>
<%= yield %>
</body>
</html>
get'/'do
雇员再培训局:索引
结束
获取“/page1”执行
雇员再培训局:第1页
结束
获取“/page2”执行
雇员再培训局:第2页
结束
*******************
不知道如何使用Ruby/Sinatra以当前页面为目标并将其构造为if语句。Sinatra没有类似于“控制器动作”Rail的概念,因此您无法找到实例化当前路由的方法。在任何情况下,您都可以检查request.path.split('/').last
,以获得当前路由的相对概念
但是,如果您希望某些内容仅在request.path==“x”时显示,则更好的方法是将该内容放在模板上,除非该内容必须在布局中的其他位置呈现。在这种情况下,您可以使用Rail的
content\u之类的工具来处理
。检查。有几种方法可以实现这一点(顺便说一句,即使您使用了ERB,我也将使用它,因为它对我来说打字更少,而且显然是一种改进)。它们大多数依赖于,通常是请求.path\u info
视图中的条件。
在任何视图中,而不仅仅是布局中:
%p
- if request.path_info == "/page1"
= "You are on page1"
- else
= "You are not on page1, but on #{request.path_info[1..]}"
%p= request.path_info == "/page1" ? "PAGE1!!!" : "NOT PAGE1!!!"
带有路由的条件路由。
块之前的。
甚至更好
before "/page1" do
@message = "Hello, this is page 1"
end
还是再好一次
before do
@message = request.path_info == "/page1" ? "PAGE 1!" : "NOT PAGE 1!!"
end
# page1.erb
%p= @message
如果你想这样做,我还建议你看看,因为当你有一个助手准备好做这项工作时,处理分割视图要容易得多。也许我误解了这个问题,但是get'/route'do;'你的信息';结束
?能否发布当前代码?为什么不将if语句生成的代码放入每个模板中?@nicooga我还没有编写。我不知道如何定位一个特定的页面。您有一个输入错误,它应该是相等的而不是赋值,即如果request.path==“x”
。另外,在.path\u info
中有一个更好的helper属性可以使用.path
,因此不需要使用.split('/').last
。请参阅文档。
before "/page1" do
@message = "Hello, this is page 1"
end
before do
@message = request.path_info == "/page1" ? "PAGE 1!" : "NOT PAGE 1!!"
end
# page1.erb
%p= @message