6

属性kindcontextを持つモデルDocumentがあります。Kind は列挙型として使用される整数です (優れたgem を使用)。コンテキストは種類 '2' のドキュメントにのみ適用されます。つまり、ドキュメントが 2 以外の種類の場合、コンテキストは空白になります。active_enum

したがって、新しいドキュメントを作成するフォーム ページでは<select>、種類を選択する必要があり、最初は非表示になっているコンテキストのテキスト領域があります。

<%= 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 %>

そして、テキストエリアは、ドロップダウンの change() イベントにバインドされた関数で jQuery の show() および hide() メソッドを使用して表示および非表示にされます。

ここまでは順調ですね。しかし、ドキュメントの編集ページでは、種類2のドキュメントを編集している可能性があるため、最初のページの読み込み時にコンテキストテキストエリアを常に非表示にしたくありません。そのため、種類 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:

それとも私はこれを考えすぎていますか?

4

2 に答える 2

1

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

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

<script type="text/javascript">
    $(function(){
        if ($('#document_kind').val() != '2')
            $('#document_context').hide();
    });
</script>
于 2013-08-12T09:13:01.560 に答える