1)Rails route
$ vi config/routes.rb
match '/app/relationships', to: 'relationships#create', via: 'post' match '/app/relationships', to: 'relationships#destroy', via: 'delete'
2)Rails controller
$ vi app/controllers/relationships_controller.rb
class RelationshipsController < ApplicationController
before_action :signed_in_user
def create
remember_token = User.encrypt(cookies[:remember_token])
current_user ||= User.find_by(remember_token: remember_token)
@user = User.find(user_params[:id])
current_user.follow!(@user)
head :no_content
end
def destroy
remember_token = User.encrypt(cookies[:remember_token])
current_user ||= User.find_by(remember_token: remember_token)
@user = User.find(user_params[:id])
current_user.unfollow!(@user)
head :no_content
end
private
def user_params
params.permit(:id)
end
def signed_in_user
remember_token = User.encrypt(cookies[:remember_token])
current_user ||= User.find_by(remember_token: remember_token)
if current_user.nil?
render status: :unauthorized
end
end
end
3)AngularJS "relationshipsResource" service
$ vi app/assets/javascripts/mymodule.js.erb
myModule.factory("relationshipsResource", function($resource) {
return $resource("/app/relationships",{},
{
'create': { method: 'POST' },
'destroy': { method: 'DELETE' }
}
);
});
4)AngularJS controller
$ vi app/assets/javascripts/mymodule.js.erb
myModule.controller("UsersShowCtrl", function($scope, $routeParams, userResource, flashService, $filter, micropostsResource, $q, sessionResource, relationshipsResource) {
.....
$scope.follow = function(id) {
function success(response) {
$scope.flg_unfollow = true;
sessionResource.current_user({}, function(response) {
flashService.setUser(response);
});
$scope.$emit("$routeChangeSuccess");
}
function failure(response) {
console.log("follow error");
}
var user_data = {
id: id
};
relationshipsResource.create(user_data, success, failure);
};
$scope.unfollow = function(id) {
relationshipsResource.destroy({ id: id }, function(response) {
$scope.flg_unfollow = false;
sessionResource.current_user({}, function(response) {
flashService.setUser(response);
});
$scope.$emit("$routeChangeSuccess");
});
};