Reputation: 113
I want to create and save data into cart model using jQuery/Ajax so, I want to call the controller's method in Ajax URL.
jQuery/Ajax script:
$(document).ready(function() {
$('.add-cart-product').click(function() {
var product_id = $('.simpleCart_shelfItem').data('product');
var user_id = $('.simpleCart_shelfItem').data('user');
$.ajax({
type: 'GET',
url: "/front/carts/add_cart",
data: {
product_id: product_id,
user_id: user_id
},
success: function(data) {}
});
})
})
carts_controller.rb
:
def add_cart
@cart = Cart.new(:user_id => params[:user_id],:product_id => params[:product_id] )
@cart.save
end
model/cart.rb
:
class Cart < ActiveRecord::Base
has_many :products
has_many :users
end
routes.rb
:
namespace :front do
resources :carts do
collection do
get 'add_cart'
end
end
end
These are all the routes which are generated from rake routes
:
aspireedge@aspireedge-H81M-S:~/Projects/Ronak/store$ rake routes | grep carts
front_carts_show GET /front/carts/show(.:format) front/carts#show
batch_action_admin_carts POST /admin/carts/batch_action(.:format) admin/carts#batch_action
admin_carts GET /admin/carts(.:format) admin/carts#index
POST /admin/carts(.:format) admin/carts#create
new_admin_cart GET /admin/carts/new(.:format) admin/carts#new
edit_admin_cart GET /admin/carts/:id/edit(.:format) admin/carts#edit
admin_cart GET /admin/carts/:id(.:format) admin/carts#show
PATCH /admin/carts/:id(.:format) admin/carts#update
PUT /admin/carts/:id(.:format) admin/carts#update
DELETE /admin/carts/:id(.:format) admin/carts#destroy
front_carts GET /front/carts(.:format) front/carts#index
POST /front/carts(.:format) front/carts#create
new_front_cart GET /front/carts/new(.:format) front/carts#new
edit_front_cart GET /front/carts/:id/edit(.:format) front/carts#edit
front_cart GET /front/carts/:id(.:format) front/carts#show
PATCH /front/carts/:id(.:format) front/carts#update
PUT /front/carts/:id(.:format) front/carts#update
DELETE /front/carts/:id(.:format) front/carts#destroy
add_cart_front_carts POST /front/carts/add_cart(.:format) front/carts#add_cart
GET /front/carts(.:format) front/carts#index
POST /front/carts(.:format) front/carts#create
GET /front/carts/new(.:format) front/carts#new
GET /front/carts/:id/edit(.:format) front/carts#edit
GET /front/carts/:id(.:format) front/carts#show
PATCH /front/carts/:id(.:format) front/carts#update
PUT /front/carts/:id(.:format) front/carts#update
DELETE /front/carts/:id(.:format) front/carts#destroy
Upvotes: 0
Views: 1796
Reputation: 19938
You can actually have your ajax requests include the token, something like:
views/layout/application.html.erb
<meta name="authenticity-token" content="<%= form_authenticity_token %>" />
assets/javascript/application.js (assuming jQuery)
$(function(){
$.ajaxSetup({
headers: { 'X-CSRF-Token': $('meta[name="authenticity-token"]').attr('content') }
});
});
Upvotes: 0
Reputation: 4427
try below code to solve issue of authenticity token
:
class CartsController < ApplicationController
protect_from_forgery except: "add_cart"
def add_cart
...
end
end
Upvotes: 1