2016-04-01 9 views
1

これをJavaスクリプトかHTML部分で行うべきかどうかはわかりません。私はHTMLの一部に使用するには、このような何かを探しています :Ruby on Rails、simple_form - htmlのselect_tagフィールドからsimple_formの隠しフィールドを設定したい

<%= f.hidden_field :skip_option, :value => "the_value_from_the_select_tag" %> 

のJavaスクリプトでの作業溶液も許容されます。

<%= simple_form_for(@option) do |f| %> 
    <%= f.error_notification %> 
    <%= link_to 'Start assessments', url_for(controller: :assessments, action: :index), id: 'start_assessment' %> 
    <%= select_tag "skip_option", options_for_select([ "Yes", "No" ], "No"), id: 'skip_option', onchange: "reason_picker()" %> 
    <%= f.text_field :reason_for_skipping, id: 'reason_for_skipping' %> 
    <%= f.button :submit, 'Save Option' %> 
<% end %> 

<script type="text/javascript"> 
    $(document).ready (
    window.reason_picker = function() { 
     var selected = document.getElementById("skip_option").selectedIndex; 
     if (selected == 0) { 
     $("#reason_for_skipping").show(); 
     $("#start_assessment").hide(); 
     } 
     else { 
     $("#reason_for_skipping").hide(); 
     $("#start_assessment").show(); 
     } 
    } 
); 
</script> 

が隠しフォームフィールドにselect_tagから値を割り当てることがホ知ってはいけない:

は、ここに私のコードです。

答えて

0

は、私が受け取ったヒントをもとに、完全な作業コードです。 いくつかの変更が必要でした。 IDの衝突を防ぐためにいくつかの要素の名前が変更され、新しい隠し要素が導入されました。 また、モデルクラスで空の文字列をデータベースのNULL値に変換するメソッドが使用されました。

これは、ファイル_form.html.erb

<%= simple_form_for(@option) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 

    <table> 
     <thead> 
     <th>Action</th> 
     <th>Skip</th> 
     <th>Reason for skipping</th> 
     </thead> 
     <tbody> 
     <tr> 
      <td> 
      <%= link_to 'Start assessments', url_for(controller: :assessments, action: :index), id: 'start_assessment' %> 
      </td> 
      <td> 
      <%= f.hidden_field :skip_option %> 
      <%= select_tag "html_skip_option", options_for_select([ "Yes", "No" ], :selected => f.object.skip_option), id: 'html_skip_option', onchange: "reason_picker()" %> 
      </td> 
      <td> 
      <%= f.text_field :reason_for_skipping, id: 'reason_for_skipping' %> 
      </td> 
     </tr> 
     </tbody> 
    </table> 

    </div> 

    <div class="form-actions"> 
    <%= f.button :submit, 'Save Option' %> 
    </div> 
<% end %> 

<script type="text/javascript"> 
    $(document).ready (
    window.reason_picker = function() { 
     var selected = document.getElementById("html_skip_option").selectedIndex; 
     if (selected == 0) { 
     $("#reason_for_skipping").show(); 
     $("#start_assessment").hide(); 
     } 
     else { 
     $("#reason_for_skipping").hide(); 
     $("#start_assessment").show(); 
     } 
     $("#option_skip_option").val($("#html_skip_option").val()); 
     if ($("#option_skip_option").val() != "Yes") { 
     $("#reason_for_skipping").val(""); 
     } 
    } 
); 
</script> 

そして、ここでは、モデルファイルoption.rb

後半の応答のため申し訳ありません
class Option < ActiveRecord::Base 
    before_save :normalize 

    def normalize 
    self.reason_for_skipping = nil unless skip_option == "Yes" 
    end 
end 
1

隠しフィールドは、単に他のフォーム入力のように振る舞うので、次のことが可能でなければなりません。ここで

$("#id_of_hidden_field").val($("#skip_option").val()); 
+0

です。私はしばらくの間、他の問題で引っ張られました。私はすぐに解決策を提供すると私はフィードバックを提供するテストします。 –

+0

これはうまくいきましたが、変更を加えた後で、完全な作業コードを投稿します。 –

関連する問題