2012-12-20 36 views
16

我要根据病情的CSS类分配给HTML的一部分苗条琅超薄郎的if-else嵌套代码

我做了以下

- if current_user 
    .title 
- else 
    .title_else 

现在,我怎么编写应嵌套在上述类中的HTML?我是否需要在if条件和else条件下编写HTML?

原因是应嵌套在上面的类之一的HTML应进一步向右。但是,如果我打算更进一步,它包括在其他条件下。现在我怎么接触这个问题?

回答

28

这里是一个班轮:

.thing class=(current_user ? 'large-menu' : 'medium-menu') 
    h4 Same content, different class 
+3

非常好。插值是不需要的。 '。class class =(true?'large-menu':'medium-menu')' – obfk

2

1)是的,你需要在创建的div中写入HTML,因为你希望它不同。如果你不希望它有所不同,那么不需要if声明!

2)我真的不明白你的意思,但是这个代码工作完美的罚款与我:

- if true 
    .title 
    h4 True is true! 
- else 
    .title_else 
    h4 True is not true! 

此代码显示了div一类的.title和与文本True is true!一个h4里面。

编辑:好吧,现在我明白你的意思了!这是不是可能做这样的事情,因为它不会呈现h4!

- if true 
    .title 
- else 
    .title_else 

    h4 Same content, different class 

我建议你写一个帮手,它允许你渲染的谐音,然后就渲染部分从两个条件内。这意味着你只需要写一个部分并调用它两次。

- if true 
    .title 
    = render 'footer' 
- else 
    .title_else 
    = render 'footer' 
+0

我问题,如果block和else块都有相同的代码块。我只是想根据条件应用不同的课程。有没有更好的方法来避免重复的代码? – nik7

15

既然你只是两个属性之间切换,Tiago Franco's answer是你的目的肯定是足够了。但是,还有另一种方法可以派上用场。

您可以使用capture将HTML呈现为局部变量,然后将该内容嵌入到您喜欢的任何控制结构中。所以,如果您的包裹内容是一个复杂一点,你可以这样做:

- shared_content = capture do 
    div This is displayed regardless of the wrapper 
- if current_user 
    | You're logged in! 
    .title 
    = shared_content 
- else 
    | You're not logged in! 
    .title_else 
    = shared_content 

我会经常使用这一个环节来包装内容,如果有可用的网址:

- image = capture do 
    img src=image_url 
- if url.blank? 
    = image 
- else 
    a href=url = image