整理.html.erb输出

时间:2010-12-28 21:34:18

标签: ruby-on-rails erb

我的应用程序布局有一个登录/注销链接,根据您是否已登录显示:

<% if signed_in? %>
    <%= link_to "Sign out", signout_path, :method => :delete %>
<% else %>
    <%= link_to "Sign in", signin_path %>
<% end %>

这很好用,但看起来真的很乱,很冗长。如何在没有这么多&lt;%...%&gt;的情况下输出相应的link_to?括号?

5 个答案:

答案 0 :(得分:5)

我会使用HAML,但如果您不想使用HAML,则可以使用ternary operator

<%= signed_in? ? link_to( 'Sign Out', signout_path, :method => :delete ) : link_to( 'Sign In', signin_path ) %>

答案 1 :(得分:4)

使用HAML;)

- if signed_in?
  = link_to "Sign out", signout_path, :method => :delete
- else
  = link_to "Sign in", signin_path

答案 2 :(得分:0)

您可以使用concat帮助程序:(ActionView :: Helpers :: TextHelper)

<% 
if signed_in? 
   concat link_to( "Sign out", signout_path, :method => :delete )
else
   concat link_to( "Sign in", signin_path )
end
%>

虽然在rails api中他们更喜欢&lt; %%&gt;语法....

答案 3 :(得分:0)

尝试在结束标记中添加 - (破折号),如下所示:

<% if signed_in? -%>
    <%= link_to "Sign out", signout_path, :method => :delete -%>
<% else -%>
    <%= link_to "Sign in", signin_path -%>
<% end -%>

来自:http://www.plexusweb.com/staff/travis/blog/post/117/Rails-inline-ERb-effects-on-HTML-structure

编辑; 我的不好,想到的是格式化HTML输出(换行等)

答案 4 :(得分:0)

使用2个开 - 关括号,您可以这样做:

<%= link_to( "Sign out", signout_path, :method => :delete ) if signed_in? %>
<%= link_to( "Sign in", signin_path) if !signed_in? %>