Web Programming examples

Google Maps,AngularJS

Archives

Ruby on Rails Tutorial delete micropost with AngularJS

(1)Rails controller

$ vi app/controllers/microposts_controller.rb

  before_action :signed_in_user, only: [:create, :destroy]
  before_action :correct_user,   only: :destroy

  def destroy
    Micropost.find(params[:id]).destroy
    head :no_content
  end

(2)add link to views

$ vi app/assets/templates/static_pages/home.html.erb
$ vi app/assets/templates/users/show.html.erb

.....
<small class="text-muted">Posted {{mp.created_at | date:'medium'}}</sm
all>
<span ng-show="chkSignin().user.id == mp.user_id"><a href="" ng-click="delete(mp.id)">delete</a></span>
.....

(3)AngularJS controller

1)User Profile page "UsersShowCtrl" controller

$ vi app/assets/javascripts/mymodule.js.erb

myModule.controller("UsersShowCtrl", function($scope, $routeParams, userResource,flashService,micropostsResource) {

  $scope.chkSignin = function() {
    return flashService.getUser();
  };

  $scope.delete = function(id) {
    micropostsResource.destroy({ id: id });
    userResource.show({ id: $routeParams.id }, function(response) {
      $scope.user_info = response;
      $scope.totalitems = $scope.user_info.microposts.length;
      microposts = $filter('orderBy')($scope.user_info.microposts,'created_at',true);
      $scope.currentitems = microposts.slice(start,end);
      flashService.setUser(response);
    });
  };
});

2)Home page "HomeCtrl" controller

  $scope.delete = function(id) {
    micropostsResource.destroy({ id: id });
    sessionResource.current_user({}, function(response) {
      tmp_feed = response.feed;
      $scope.totalitems = tmp_feed.length;
      feed_items = $filter('orderBy')(tmp_feed,'created_at',true);
      $scope.currentitems = feed_items.slice(start,end);
      flashService.setUser(response);
    });
  };

Ruby on Rails Tutorial delete user with AngularJS

(1)Administrative users

1)adds the admin column to the users table

$ rails generate migration add_admin_to_users admin:boolean

$ vi db/migrate/…._add_admin_to_users.rb

class AddAdminToUsers < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

2)migrate

$ bundle exec rake db:migrate

3)sample data

$ rails console

2.0.0p247 :001 > adminuser = User.create(name: "admin", email: "admin@example.com", password: "xxxxx", password_confirmation: "xxxxx",admin: true)
2.0.0p247 :002 > adminuser.admin?
 => true

(2)Rails controller

1)destroy action

$ vi app/controllers/users_controller.rb

  def destroy
    User.find(params[:id]).destroy
    head :no_content
  end

2)users have to be logged in to delete users

$ vi app/controllers/users_controller.rb

before_action :signed_in_user, only: [:index,:update,:destroy]

3)only admins can delete users

$ vi app/controllers/users_controller.rb

  before_action :admin_user,     only: :destroy
......
  private
........
    def admin_user
      remember_token = User.encrypt(cookies[:remember_token])
      current_user ||= User.find_by(remember_token: remember_token)
      render status: :unauthorized unless current_user.admin?
    end

(3)AngularJS template view

$ vi app/assets/templates/users/index.html.erb

<ul ng-repeat="user in currentitems" class="users">
  <li>
    <img alt="{{user.name}}" src="https://secure.gravatar.com/avatar/{{hash(user.email)}}?s=52" />
    <a href="/users/{{user.id}}">{{user.name}}</a>
    <a ng-show="{{ychkAdmin}}" href="" ng-click="delete(user.id)">| delete</a>
  </li>
</ul>

(4)AngularJS controller

$ vi app/assets/javascripts/mymodule.js.erb

myModule.controller("UsersIndexCtrl", function($scope, userResource, flashService, $location, sessionResource, $q) {
......
  var deferred = $q.defer();
  deferred.promise.then(function (result) {
    var user_info = result;
    if (user_info.user.id > 0) {
      $scope.chkAdmin = user_info.user.admin;
      userResource.index({}, function(response) {
        $scope.users = response;
        $scope.totalitems = $scope.users.length;
        $scope.currentitems = $scope.users.slice(start,end);

        $scope.$watch('currentpage', function() {
          start = ($scope.currentpage - 1) * $scope.itemsperpage;
          end = start + $scope.itemsperpage;
          $scope.currentitems = $scope.users.slice(start,end);
        },true);
      });
    } else {
      $location.path("/signin");
    }
  },function (reason) {
    console.log("qgetUser-Error");
  })
  qgetUser (deferred);
......
  $scope.delete = function(id) {
    userResource.destroy({ id: id });
    userResource.index({}, function(response) {
      $scope.users = response;
      $scope.totalitems = $scope.users.length;
      $scope.currentitems = $scope.users.slice(start,end);
    });
  };
});