2015-08-24 2 views
0

Я пытаюсь сохранить вход в мою базу данных с помощью Angular and Rails. В тот момент, когда действие выполняется я получаю 400 (Bad Request) ошибки в лог консоли и ошибка Rails заключается в следующем,Сохранение данных дает ошибку, параметр отсутствует или значение пуст

Started POST "/movies.json" for 127.0.0.1 at 2015-08-24 07:57:09 +0200 
Processing by MoviesController#create as JSON 
    Parameters: {"titles"=>"Star", "movie"=>{}} 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
Completed 400 Bad Request in 12ms (ActiveRecord: 0.2ms) 

ActionController::ParameterMissing (param is missing or the value is empty: title): 
    app/controllers/movies_controller.rb:24:in `movie_params' 
    app/controllers/movies_controller.rb:8:in `create' 

routes.rb

resources :movies, only: [:create, :index, :show] do 
end 

Шаблон search.html.haml используется , здесь пользователь должен ввести заголовок.

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

Мой movieController.js, это действие, которое срабатывает, когда пользователь нажимает на DIV в #addMovie

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

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

     $scope.addMovie = function(){ 

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

Угловое обслуживание,

angular.module('addMovieseat') 

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

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

    return o; 

    }]) 

И movies_controller. rb

class MoviesController < ApplicationController 

    def index 
    respond_with Movie.all 
    end 

    def create 
    respond_with Movie.create(movie_params) 
    end 

    private 
    def movie_params 
    params.require(:movie).permit(:title) 
    end 

end 

ответ

1

Попробуйте изменить

movies.create({ 
    titles: $scope.title, 
}); 

в

movies.create({ 
    title: $scope.title, 
}); 

В конечном счете, вам нужно ваши параметры выглядеть следующим образом:

Parameters: {"movie"=>{"title"=>"Star"}} 
+0

Изменения '' titles' к title' действительно исправил '400 ошибки '. Когда я делаю действие save и смотрю файл movie.json, он говорит '[null, null, null, null]', чтобы заголовок еще не был сохранен? Просто введите пустой вход? Где я могу изменить те параметры, которые вы предложили? –

+0

hmm .. открыть 'рельсы консоли' и напечатать' Movie.last'. Если вы видите что-то там, что выглядит правильно, то оно правильно сохраняется. Если вы видите нечто похожее на 'ActiveRecord Association []' или запись фильма с названием 'title: nil', то оно не сохраняется должным образом. Если он правильно сохраняется, возникает проблема с выходом json. – thedanotto

+0

Вы правы, заголовок сохраняется правильно. Таким образом, проблема с выходом JSON. Пойдемте посмотреть. Благодарю. –

Смежные вопросы