lacfo
lacfo

Reputation: 79

Rails- Using check box to update database without submit button

I am new to rails and I am working on a online shopping project. I want to use a checkbox in the shopping-cart to let user to select whether to buy the product. But I don't like a submit button beside the checkbox. I know I have to use ajax to update the database without the submit button. But I did not make that work. Following is my code.

Here is jquery ajax,

$(document).ready(function(){
    $(".checkbox_submit").change(function(){
        $.ajax({url: {:action => create}, success: function(result){
            $(this).parents('form:first').submit();
        }});
    });
});

And this is my view, the first td is the checkbox

<tr>
    <td style="width: 5%;">
        <%= form_for cart_item, url: cart_item_path(cart_item.product_id), remote: true do |f| %>
            <%= f.check_box(:buy_now, class: "checkbox_submit") %>
        <% end %>
    </td>
    <td style="width: 20%;" >
        <%= link_to(product_path(cart_item.product)) do %><%= image_tag(cart_item.product.image.thumb.url) %><% end %>
    </td>
    <td style="width: 30%;"><%= link_to(cart_item.product.title, product_path(cart_item.product)) %></td>
    <td><%= cart_item.product.price %></td>
    <td>
        <%= form_for cart_item, url: cart_item_path(cart_item.product_id, remote: true) do |f| %>
            <%= f.select :quantity, 1..cart_item.product.storage, class: "select_submit" %>
        <% end %>
    </td>
    <td><strong>¥<%= cart_item.product.price * cart_item.quantity %></strong></td>
    <td><%= link_to(cart_item_path(cart_item.product_id), method: :delete) do %><i class="fa fa-trash-o" aria-hidden="true"></i><% end %></td>
</tr>

And this is my controller

def update
        @cart = current_cart
        @cart_item = @cart.cart_items.find_by(product_id: params[:id])
        if @cart_item.product.storage >= cart_item_params[:quantity].to_i
            @cart_item.update(cart_item_params)
            redirect_to carts_path
        else
            redirect_to carts_path, alert: "exceed the storage"
        end

end

Could anyone help me on this? Thanks in advance!

Upvotes: 1

Views: 961

Answers (1)

puneet18
puneet18

Reputation: 4427

Try below code:

In js:

$(document).ready(function(){
    $(".checkbox_submit").change(function(){
        var src = $(this);
        $.ajax({
          type: "post",
          url: "/sava_data", 
          success: function(result){
            src.parents('form:first').submit();
        }});
    });
});

In config/routes.rb

post '/save_data' => 'controller_name#action'

Upvotes: 1

Related Questions