2010-10-20 192 views
1

我正试图在连接到我自己的服务器(本地)时执行某些操作。 我从网站上找到了request.env,所以我使用该数组来比较我的IP。这个ruby语句有什么问题?

<% 
if request.env['HTTP_HOST']!="127.0.0.1" 
    puts request.env['HTTP_HOST'] 
else 
    puts "its Local!" 
end 
%> 

当我在上面Rails3中运行,我什么也没得到印... 我是新来的红宝石& Rails3中..

回答

4

puts将写入服务器在这种情况下,不响应。所以你应该在服务器的日志中查找你的消息。

+0

我没有投票给你,但这个答案没有解决原来的问题,即“使用<%= %>而不是<% %>”。 – 2010-10-20 13:25:45

+0

O.P.感兴趣的是为什么它没有打印任何东西。 puts永远不会将输出打印到响应中,仅仅是日志 – 2010-10-20 15:20:11

12

当您想要在网页中输出时,请使用<%= %>而不是<% %>。输出将是表达式的返回值,所以你不需要puts

<%= 
    if request.env['HTTP_HOST']!="127.0.0.1" 
    request.env['HTTP_HOST'] 
    else 
    "its Local!" 
    end 
%> 

请注意,您还可以使用local?方法,而不是直接检查环境。

<%= 
    if request.local? 
    "its Local!" 
    else 
    request.env['HTTP_HOST'] 
    end 
%> 

如果你喜欢简洁,你可以做到这一点作为一个行:

<%= if request.local? then "its Local!" else request.env['HTTP_POST'] end %> 

为了获得更大的视图简洁,使用一个辅助方法:

<%= ip_or_local %> 

其中匹配你看到的帮手:

def ip_or_local 
    if request.local? 
    "its Local!" 
    else 
    request.env['HTTP_HOST'] 
    end 
end 

对于这种简单的情况,它可能是矫枉过正的,但通常当你开始在你的视图中看到大量的代码时,是时候考虑在助手中隐藏某些东西了。

+2

并且使用语法糖:'request.local? ? “它的本地!” :request.env ['HTTP_POST']'。 – Yannis 2010-10-20 12:08:42

+0

@Yannis,我认为三元运算符语法醋。 :) – 2010-10-20 13:24:50

+0

有没有像NOT运算符,我可以使用request.local?在PHP中,如果(!$ a)表示'如果不是$ a ..',我想知道ruby中是否有这样的事情。这样,我不需要写else语句。 – pavlo 2010-10-20 16:59:44

1

是否要打印到日志或视图?

如果你把东西分解成单独的erb标签,它可能会更清晰。

<% if local? %> 
    <%= "Text for local" %>  
<% else %> 
    <%= "Text for remote" %>  
<% end -%> 

您需要使用<%=%>标记为要打印的线条和<%%>标签为您希望逻辑,像条件语句行。

如果您是第一次使用rails,您应该查看从头开始的视频中的peepcode rails,它们相当便宜,许多rails开发人员建立了他们的基础。 Railscasts也是小吃大小的教程,很容易让你通过大量的基础知识。

推荐阅读:

RUBY: 红宝石镐 红宝石路

的Rails: Rails的方式 头在轨道上

希望我的一些帮助第一台红宝石。