Ошибка типа: $ http.movie не является функцией

0

Я пытаюсь сохранить название фильма в моей базе данных с помощью Angular и Rails, но у меня есть некоторые ошибки, и я думаю, что знаю, в чем проблема, но я не знаю, как это исправить.

Настройка,

Это мой шаблон поиска. Когда пользователь нажимает на addMovie div, addMovieCtrl срабатывает и пытается сохранить вход.

%div{"ng-controller" => "searchCtrl", :id => "container_search"}
  #addMovie{"ng-controller" => "addMovieCtrl"}
    %div{"ng-click" => "addMovie()"}
      %input{:type => "text", "ng-model" => "title"}
      addMovie action.

Это movieController.js,

angular.module('addMovieseat', ['ui.router', 'templates'])

  .controller('addMovieCtrl', ['$scope', 'movies',
    function($scope, movies){
      $scope.movies = movies.movies;

      $scope.addMovie = function(){

        console.log ("Hello")

        if(!$scope.title || $scope.title === '') { return; }
        movies.create({
          titles: $scope.title,
        });
        $scope.title = 'Star wars';
      };
    }
  ])

И это movieService.js

angular.module('addMovieseat')

  .factory('movies', ['$http', function($http){
    var o = {
      movies: []
    };

    o.create = function(movie){
      return $http.movie('/movies.json', movie).success(function(data){
        o.movies.push(data);
      });
    };

    return o;

  }])

Модель movie.rb в Rails

class Movie < ActiveRecord::Base

  def as_json(options = {})
  end

end

my app.js.coffee,

@myApp        = angular.module('myApp',[]);
@flapperNews  = angular.module('flapperNews',[]);
@app          = angular.module('movieseat', ['addMovieseat','myApp', 'flapperNews', 'ui.router', 'Devise']);

# for compatibility with Rails CSRF protection

@app.config([
  '$httpProvider', ($httpProvider)->
    $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content')
])

@app.run(->
  console.log 'angular app running'
)

Когда я нажимаю на div addMovie я получаю эту ошибку,

TypeError: $http.movie is not a function at Object.o.create

Я искал урок Angular/Rails на thinkster.io, и я заметил, что когда я localhost:3000/posts.json на localhost:3000/posts.json я получаю страницу со всеми сообщениями, которые я создал (во время учебника). Но когда я иду на localhost:3000/movies.json я получаю " No route matches [GET] "/movies.json"

1 ответ

2
Лучший ответ

Конечно, нет.

замещать

$http.movie('/movies.json', movie)

С:

$http.post('/movies.json', movie)

Sidenote, haml позволяет писать хорошие реквизиты html:

%div( ng-click="addMovie()" )
  • 0
    Похоже, я просто заменил все посты фильмами. Тупое движение (все еще учится). Благодарю.
  • 0
    У меня есть еще один вопрос, касающийся этой проблемы. Я заявил, что не могу получить доступ к localhost:3000/movies.json Я снова прочитал учебник Thinkster, но не вижу, как проходит процесс создания этого файла. У меня есть localhost:3000/posts.json но я не могу понять, как создать это для movies.json.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню