<%...%>之间的差异和<%= ..%>在轨道3

时间:2012-01-25 03:36:45

标签: ruby-on-rails

我在helpers / application_helper.rb文件中有测试方法:

def test
  concat("Hello world")
end

然后,在index.html.erb中我称之为:

Blah
<% test %>

浏览器显示:

  

布拉赫   你好世界

通常情况下,但如果我改变

<%= test %>

浏览器显示:

  

Blah Hello worldBlah Hello world

它复制了所有页面。我不知道为什么? 他们之间有什么区别? 谢谢你的帮助!

5 个答案:

答案 0 :(得分:13)

通常&lt; %%&gt;是一个Rails代码片段(即开始条件,结束条件等),而&lt;%=%&gt;实际上计算表达式并向页面返回一个值。

答案 1 :(得分:10)

the Rails docs开始,concat仅应在<% %>代码块中使用。当你在<%= %>代码块中使用它时,你会看到它两次,因为concat将提供的文本附加到输出缓冲区,但是它也将整个输出缓冲区返回给你的帮助方法,这是然后由<%=输出,导致整个页面重复。

通常情况下,你根本不需要使用concat(我从来没有遇到过我需要的情况)。在你的助手中,你可以这样做:

def test
  "Hello world"
end

然后在您的视图中使用<%= test %>

答案 2 :(得分:10)

有什么区别?

<% %>让您评估视图中的rails代码

<%= %>让您评估视图中的rails代码并在页面上打印出结果

示例#1: 等号类似于“put”所以:

<%= "Hello %> 

...与:

相同
<% puts "Hello" %> 

示例#2:

<% if !user_signed_in? %>
    <%= "This text shows up on the page" %>
<% end %> 

#returns "This text shows up on the page" if the user is signed in

答案 3 :(得分:5)

就像这样

prod

integration

答案 4 :(得分:-1)

见:

<%= You need to do this %>
<% You shouldn't do this %>