Сохранение данных дает ошибку, параметр отсутствует или значение пусто

0

Я пытаюсь сохранить вход в мою базу данных, используя Angular и 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;

  }])

И movie_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 ответ

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

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

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

в

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

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

Parameters: {"movie"=>{"title"=>"Star"}}
  • 0
    Изменение titles на title действительно исправило 400 error . Когда я выполняю действие сохранения и смотрю на файл movies.json, там написано [null,null,null,null] так что заголовок еще не сохранен? Просто пустой ввод? Где я могу изменить те параметры, которые вы предложили?
  • 0
    хм .. открой rails console и Movie.last . Если вы видите что-то там, что выглядит правильно, значит, оно сохраняется правильно. Если вы видите что-то похожее на ActiveRecord Association [] или запись фильма с title: nil значит, оно не сохраняется должным образом. Если он сохраняется правильно, значит, есть проблема с выводом json.
Показать ещё 1 комментарий

Ещё вопросы

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