Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Sinatra模板内的If语句_Ruby_Sinatra - Fatal编程技术网

Ruby Sinatra模板内的If语句

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 -->

我只想在特定路线/页面上显示消息。本质上,如果接通/路由,则显示一条消息

我试着翻阅Sinatra的文档,但找不到具体的方法。有没有一种Ruby方法可以让这一切顺利进行

编辑:下面是我想做的一个例子

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