2016-06-28 4 views
0

可能でしょうかもしそうなら、それは示唆されていますか?条件付きでビューにcssクラスを追加します。erbを使用しませんか?

条件がtrueの場合、要素にクラスを追加します。私はこれを行う方法を見つけ出すことができる唯一の方法は、次のようなものを使用してビュー自体にERBを使用している:

<div <%= if @status == 'success'; "class='do-something'"; end %>> 
    message 
</div> 

またはdiv_forを使用して、それは厄介だと私はむしろ使用してhtml要素のクラスを設定するのですヘルパー、またはモデル/コントローラ自体のメソッド。

アクションが成功すると、何らかの形で(データ属性、クラスなどで)html要素を見つけて、それにクラスを追加します。

+0

は、JavaScriptでそれをやってみましたがありますか? –

+0

それは確かにオプションです、私の意見を乱雑にするのではなく、それを行うためのレール方法がなければならないと思っていただけです。 –

答えて

0

あなたが望むことを実行する方法はたくさんあります。ここでは一つだ:

<%= content_tag :div, message, class: ("do-something" if @status == "success") %> 

あなたはそれヘルパーようにしたい場合は、それはあまりにも簡単です:

その後
def message(status, message=nil, &block) 
    css_class = "do-something" if @status == success 
    if block 
    content_tag(:div, class: css_class, &block) 
    else 
    content_tag(:div, message, class: css_class) 
    end 
end 

<%= message @status do -%> 
    Message 
<% end %> 

または:

<%= message @status, "Message" %> 
+0

親愛なるdownvoter:あなたのdownvoteの理由を説明するコメントを残してください。私の答えが不足している場合、私はそれを改善する機会に感謝します。 –

+0

私の答えの 'message'ヘルパーはERBを使わず、OPは「ヘルパー*を使ってhtml要素のクラスを設定したい」と書いたので、私の答えはかなり直接頼まれました。 –

+0

確かに、あなたのソリューションは私にERBを使用しているように見えるので、質問された質問には言及していません。おそらく、オペレーションは、ビューを検索して、クラスを変更する必要があるあらゆる場所にERBを挿入する必要はなく、将来のビューの追加にERBを挿入することを忘れないようにする必要があります。私があなたのコードを誤解した場合、私に知らせてください、私は私のdownvoteを変更します。 – 7stud

-2

これがなければなりません仕事

<div class=<%= @status == 'success' ? 'do-something' : '' %>> 
</div> 
0

条件で、erbを使用しないで、cssクラスをビューに追加しますか?

その後、HTMLを修正し、鋸山であなたのビューを解析することができます。

def some_action 
    status = 'success' 
    @planet = 'mars' #ERB variable 

    if status == 'success' 
     html = render_to_string #The view after executing the ERB 
           #and applying the ERB variables and 
           #adding the layout. 

     doc = Nokogiri::HTML html 
     target_class = 'title' 

     tags_containing_target_class = doc.xpath(
     "//*[contains(concat(' ', normalize-space(@class), ' '), ' #{target_class} ')]" 
    ) #A well known method to search a class like class="title bold" 
     #or class="bold title" 

     class_to_add = 'highlight' 

     tags_containing_target_class.each do |tag| 
     tag['class'] = tag['class'] << " #{class_to_add}" 
     end 

     render text: doc.to_html 
    end 
    end 
関連する問題