根据用户是否已登录,我想打印另一种%body标签.
这就是我目前的做法:
- if defined? @user
%body(data-account="#{@user.account}")
%h1 Welcome
-# all my content
- else
%body
%h1 Welcome
-# all my content
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,那里有很多重复的代码.我怎么能消除这个?我已经尝试过以下方法:
- if defined? @user
%body(data-account="#{@user.account}")
- else
%body
%h1 Welcome
-# all my content
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为HAML将其解释为好像%h1和内容是else语句的一部分,当然它们不是.
关于如何解决这个问题的任何想法?我一直在遇到这个问题,所以我无法想象它没有一个简单的解决方案.
小智 13
我不认为您可以避免缩进问题,因为HAML自动分配"结束"语句的方式,但您可以将if语句推送到body标签本身 -
%body{:data_account => (defined? @user ? @user.account : nil)}
Run Code Online (Sandbox Code Playgroud)
而不是
%body(data-account="#{@user.account}")
Run Code Online (Sandbox Code Playgroud)
不是超级漂亮,但比重复整个街区更难看!
Jed*_*der 12
!!!
- @user = "jed" #=> stubbing out an instance
%html
%head
- string = defined?(@user) ? "#{@user}" : nil #=> for demo only, wrap this in a helper method
%title{'data-account' => string}
%body
=yield
Run Code Online (Sandbox Code Playgroud)