这个ruby声明有什么问题?

1 ruby ruby-on-rails erb

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

<%
if request.env['HTTP_HOST']!="127.0.0.1" 
     puts request.env['HTTP_HOST']
else
     puts "its Local!"
end 
%>
Run Code Online (Sandbox Code Playgroud)

当我在rails3中运行时,我没有打印任何东西......我是ruby&rails3的新手..

Mar*_*mas 12

如果要在网页中输出,请使用<%= %>,而不是<% %>.输出将是表达式的返回值,因此您不需要puts.

<%= 
   if request.env['HTTP_HOST']!="127.0.0.1"  
     request.env['HTTP_HOST'] 
   else 
     "its Local!" 
   end  
%> 
Run Code Online (Sandbox Code Playgroud)

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

<%= 
   if request.local?
     "its Local!"
   else 
     request.env['HTTP_HOST']
   end  
%> 
Run Code Online (Sandbox Code Playgroud)

如果您喜欢简洁,可以将其作为一行:

<%= if request.local? then "its Local!" else request.env['HTTP_POST'] end %>
Run Code Online (Sandbox Code Playgroud)

要获得更加简洁的视图,请使用辅助方法:

<%= ip_or_local %>
Run Code Online (Sandbox Code Playgroud)

您放置的匹配视图助手中的位置:

def ip_or_local
   if request.local?
     "its Local!"
   else 
     request.env['HTTP_HOST']
   end  
end
Run Code Online (Sandbox Code Playgroud)

对于这个简单的情况,它可能有点过分,但一般来说,当你开始在视图中看到大量代码时,是时候考虑将某些东西隐藏在帮助器中了.

  • 语法糖:`request.local??"它的本地!" :request.env ['HTTP_POST']`. (2认同)