Я пытаюсь сохранить название фильма в моей базе данных с помощью 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"
Конечно, нет.
замещать
$http.movie('/movies.json', movie)
С:
$http.post('/movies.json', movie)
Sidenote, haml позволяет писать хорошие реквизиты html:
%div( ng-click="addMovie()" )
localhost:3000/movies.json
Я снова прочитал учебник Thinkster, но не вижу, как проходит процесс создания этого файла. У меня естьlocalhost:3000/posts.json
но я не могу понять, как создать это для movies.json.