这个ruby声明有什么问题?

时间:2010-10-20 10:35:58

标签: ruby-on-rails ruby erb

当我连接到我自己的服务器(本地)时,我正在尝试做某事。 我从网站上找到了request.env,所以我使用该数组来比较我的IP。

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

当我在rails3中运行时,我什么都没打印出来...... 我是ruby&amp; rails3 ..

的新手

3 个答案:

答案 0 :(得分: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

对于这个简单的情况,它可能有点矫枉过正,但一般来说,当你开始在视图中看到很多代码时,是时候考虑将某些东西隐藏在助手中了。

答案 1 :(得分:4)

在这种情况下,

puts将写入服务器,而不是响应。所以你应该在服务器的日志中查找你的消息。

答案 2 :(得分:1)

您要打印到日志还是视图?

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

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

您需要使用&lt;%=%&gt;要打印的行的标签和&lt; %%&gt;你想要逻辑的行的标签,比如条件。

如果你是初次使用rails,你应该从头开始查看peepcode rails视频,它们非常便宜,许多rails开发人员都根据其中的内容构建了它们。 Railscasts也是零食大小的小教程,可以轻松地帮助您完成许多基础知识。

推荐阅读:

RUBY: 红宝石镐 红宝石的方式

滑轨: Rails的方式 首先登上铁轨上的红宝石

希望我有所帮助。