Rails <%= page_title = 'xxxxx' %>和<% page_title = 'xxxxx' %>的区别

匿名 · 2011年12月03日 · 最后由 loushizan 回复于 2012年02月04日 · 2947 次阅读
<%= @page_title = 'xxxxx' %> #这样会出现在html代码里
<% @page_title = 'xxxxx' %> #这样不会出现在html代码里

我还是没有弄明白,求指教。

=evaluate 后面的 expression 并且把值显示再 html 上。 没=是执行后面的代码

从语言的角度,一个被当作 expression,一个被当作 statement.

  • <%= expression %>会把expression的返回结果添加到当前位置,可以理解为替换成 expresssion的结果
  • <% expression %> 只是演算expression,对erb的结果不作任何修改,可以理解为 执行后从erb文件中删除。

假设有 layout layouts/application.html.erb

<html>
  <head><title><%= @page_title %></title></head>
  <body>
    <%= yield %>
  </body>
</html>

下面这个 view

<% @page_title = '1st title' %>
<p>1st view</p>

只是设置了@page_title,可以在其它地方用,比如 layout 中,但是本身不会插入到那一行中,所以最终产生

<html>
  <head><title><%= @page_title %></title></head>
  <body>
    <p>1st view</p>
  </body>
</html>

第二个

<%= @page_title = '2nd title' %>
<p>2nd view</p>

因为赋值语句返回左值,所以@page_title的当前值会插入,最终产生:

<html>
  <head><title>2nd title</title></head>
  <body>
    2nd title
    <p>2nd view</p>
  </body>
</html>

这个我个人觉得死背下来就好,规定!;无=号是为了运行 Ruby 代码;有=号是输出;

将=理解为输出

需要 登录 后方可回复, 如果你还没有账号请 注册新账号