2013-08-12 28 views
5

私はモデル種類文脈を持っている文書を持っています。種類は、列挙型として使用される整数です(優秀なactive_enum gemを使用しています)。文脈は種類 '2'の書類にのみ適用されます。つまり、書類が2以外の種類の場合、文脈は空白になります。新しいドキュメントを作成するために、フォームページでそうRails:条件付きでフォームフィールドを表示/非表示する最適な方法は?

、私は種類を選択する<select>を持っており、最初に隠されているコンテキストのTEXTAREA、:

<%= form_for @document do |f| %> 

    ... 

    <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %> 

    <%= f.select :kind, Document.active_enum_for(:kind).to_select %> 

    ... 

<% end %> 

およびTextAreaが示され、隠されていますjQueryのshow()メソッドとhide()メソッドをドロップダウンリストのchange()イベントにバインドされた関数で使用します。

これまでのところ、とても良いです。しかし、の文書の編集ページでは、の文書を編集している可能性があるため、文脈のテキストエリアがの場合は常にが最初のページの読み込み時に非表示になります。ですから、私たちが種別2の文書を編集している場合には、最初にテキストエリアを表示したいのですが、他の場合は隠しておきます。ここで

は、私が今持っているものです。

<% if @document.kind == 2 %> 
    <%= f.text_area :context, placeholder: 'Context' %> 
<% else %> 
    <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %> 
<% end %> 

がこれを行うには良い方法ではないですか?これはちょっと気味悪いし、私には冗長な感じです。 f.text_areaに電話して、style:オプションを条件付きで含めることはできませんか?

これを熟考していますか?

答えて

10

使用この:

<%= f.text_area :context, placeholder: 'Context', style: "#{'display:none' if @document.kind == 2}" %> 

か、このためのCSSクラスを追加することができ、

display-none{ 
    display:none; 
} 

<%= f.text_area :context, placeholder: 'Context', class: "#{'display-none' if @document.kind == 2}" %> 

おかげ

+0

インラインスタイルがありません... – nXqd

+2

インラインスタイリングは恐ろしいアイデアだと私は同意しますが、99%は "display:none;"と思っています。隠され、Javascriptを使って表示される要素は、例外である可能性があります。 – GMA

0

またはJavaScriptを試すことができますか?重複したコードを減らす方法です。隠すフィールドがたくさんある場合、この方法にはいくつかの利点があります。

<%= f.text_area :context, placeholder: 'Context' %> 

<script type="text/javascript"> 
    $(function(){ 
     if ($('#document_kind').val() != '2') 
      $('#document_context').hide(); 
    }); 
</script> 
関連する問題