2016-10-04 10 views
1

Ruby Slimでインラインifをしようとしています。どちらの場合もルビースリムインラインの場合

以下の私の例を考えると

...

- if @droppable 
    .panel data-draggable="true" 
    span More content here 
- else 
    .panel 
    span More content here 

、唯一の違いは、トップレベル.panel要素にdata-draggable属性の存在です。 .panelの内容は同じですので、私は、次のような何かを達成したいと思います:

.panel (@droppable ? data-draggable="true") 
    span More content here 

はスリムでこれを達成する方法はありますか?

+1

最初の例は正しいです。 @droppableに問題があるかもしれません。ページに印刷してその値を確認してください。 –

+0

"does not work"は不適切なエラー報告です。正確なエラーメッセージとスタックトレースを提供してください。 – mudasobwa

+0

"動作しません"と申し訳ありませんが、 "span hello"は@droppableがtrueでない場合にのみ表示されます。私はどちらの場合にもこんにちはを表示する方法を知らない。 – Mobidi

答えて

0

使用dynamic tags

ruby: 
    def panel! 
    {tag: 'panel'}.tap do |tag| 
     tag[:"data-draggable"] = true if @droppable 
    end 
    end 

*panel! 
    span hello 
+0

確かにこれを使用するつもり、ありがとう! – Mobidi

+1

シンプルなオプションの属性を実現するためにややオーバーキルです。 – meagar

+0

はい、しかし、「男に魚を与え、あなたは一日彼に餌を与えます。あなたが魚を釣ることを人に教えて、あなたは一生の間彼に食糧を与えます。」 – mudasobwa

1

あり、ここでifのための必要がなく、三項演算子は、3つのオペランドではなく、2が必要です。

あなたが特定の値、またはその不在で属性の存在にtruthy/falsy値をオンにする&&演算子を使用して、意図的にさせる、ゼロ/ falseの値を持つ属性を省略するように設計されているスリムとHAML両方:

スリムで

:HAMLで

.panel data-draggable=(@droppable && "true") 
    span Hello 

.panel{data: {draggable: @droppable && "true"}} 
    %span Hello 

どちらの場合も、@droppableがtruthy値の場合はdata-draggable="true"が追加され、それ以外の場合は属性が省略されます。

+0

これは間違いなく受け入れられる答えでしょう。動的タグは余計に使用されています。 – jeffdill2