2017-10-26 1 views
0

私のフォームにトグルボタンがあり、トグルしています。コントローラーからのデータベースのブール値。 しかし、両方ともHTMLとjsonリクエストを送信しています。私はちょうど1つのjsonリクエストを送信したい。 (使用して、レール3 *)Ruby onレール3 - チェックボックスフィールドをform_for内で使用すると、ajax呼び出しでhtmlとjsonの両方のリクエストがjsまたはjsonになる必要があります。

post_as_premium.html.erb

<%= form_for @editor, url: set_as_premium_reporter_path, remote: true do |f| %> 
<div class="editorSettings"> 
     <div class="premiumCheck"> 
     <label class="clearfix" for="user_post_premium_permission"> 
      <span class="checkBoxWrap <%= @editor.post_premium_permission ? 'allChecked' : '' %>"> 
      <%= f.check_box :post_premium_permission %> 
      </span> 
     </label> 
     </div> 
    </div> 
<% end %> 
    <script type="text/javascript"> 
     if($("#user_post_premium_permission").parent("span").hasClass('allChecked')){ 
      $("#user_post_premium_permission").attr('checked', true); 
     }else{ 
      $("#user_post_premium_permission").attr('checked', false); 
     } 

     $("#user_post_premium_permission").on("change", function(){ 
      if ($(this).prop('checked')){ 
       $(this).parent("span").addClass("allChecked"); 
      }else{ 
       $(this).parent("span").removeClass("allChecked"); 
      } 
      this.form.submit(); 
     }); 
    </script> 

2]コントローラ -

def post_as_premium 
    @editor = current_user 
end 

def set_as_premium 
if params[:editor] && params[:user][:post_premium_permission] 
    current_user.update_attributes(post_premium_permission: params[:user][:post_premium_permission]) 
    respond_to do |format| 
    format.js { head :ok } 
    format.html { redirect_to post_as_premium_path(current_user)} 
    end 
end 
+0

私は 'form.submit()'はフォームを送信すると思います。送信ボタンをクリックしたことを暗示します。 – HarlemSquirrel

+0

@HarlemSquirrelリクエストはjsonまたはjsでなければなりませんが、htmlではありません。 :( – Kalashir

答えて

1

代わりのform.submit()でフォームを送信すると、あなたは$.postとAJAX POSTリクエストを作ることができます

$("#user_post_premium_permission").on("change", function(){ 
    if ($(this).prop('checked')){ 
    $(this).parent("span").addClass("allChecked"); 
    } else { 
    $(this).parent("span").removeClass("allChecked"); 
    } 

    // AJAX POST request 
    var url = $(this).parent("form").attr('action') 
    $.post(url, { editor: { post_premium_permission: $(this).prop('checked') } }) 
}); 
関連する問題