2014-10-17 4 views
0

Я пытаюсь получить данные в своей коллекции, но я получаю ошибку UnknownFormat в Rails. Я следую this RailsCast, чтобы получить возможность немного узнать о Магине.ActionController :: UnknownFormat reply_with using Backbone.js

Я нахожусь в той части, где мы представляем данные в виде коллекции, но когда я использую код примера, я получаю ошибку UnknownFormat.

Это мой Rails MoviesController

class MoviesController < ApplicationController 
    respond_to :json 

    def index 
    respond_with Movie.all 
    if logged_in? 
     @user = User.find(session[:user_id]) 
     @movies = @user.movies 
    end 
    end 

Это мой файл Rails маршрутизатор,

Rails.application.routes.draw do 

    get 'sessions/new' 

    root    'movies#index' 
    get 'signup' => 'users#new' 

    get 'login' => 'sessions#new' 
    post 'login' => 'sessions#create' 
    delete 'logout' => 'sessions#destroy' 

    scope "api" do 
    resources :movies, :defaults => {:format => "json"} 
    end 

    resources :users 

И это моя коллекция Backbone

class Movieseat.Collections.Movieseats extends Backbone.Collection 

    url: '/api/movies' 

Я сделал некоторые исследования и обнаружил, что многие люди говорят, что мне нужно добавить , :defaults => {:format => "json"} в мой ресурс фильма. Но это мне не помогло. Кто-нибудь знает, что вызывает эту ошибку?

ответ

1

У меня была эта проблема только сегодня. У меня есть два возможных исправлений для этого ...

1) Просто удалите respond_to, синтаксис respond_with и заменить его render json синтаксис:

class MoviesController < ApplicationController 
    def index 
    @movies = Movie.all 

    if logged_in? 
     @user = User.find(session[:user_id]) 
     @movies = @user.movies 
    end 
    render json: @movies.to_json 
    end 
end 

Я понимаю, что это не может быть идеальным, но это что сработало для меня.

2) Этого я не пытался, но, возможно, стоит попробовать (не использовать его с первым решением).

Где-то в вашей магистрали установки:

$.ajaxSetup({  
    dataType: 'json' 
}); 
+0

Если я использую 'respond_to: JSON,: html' вместо просто' respond_to: json' я не получаю ошибку UnknownFormat но это дает мне ошибку когда я использую '- @ movies.each do | movie | % div {: class => "movie-frame"} = movie.title' говорит 'undefined method' each 'for nil: NilClass' –

+0

Я полагаю, что я не понимаю, как вы планируете использовать магистраль в этом случае. Я думал, что вы предлагаете @movies как json для создания базовой сети. Разве это не так? Кроме того, я полагаю, что очевидная вещь здесь - убедиться, что ваша модель фильмов фактически возвращает данные. Попробуйте открыть консоль рельсов и сделать «Movie.all» – Jeremiah

+0

. А может быть. Ну, я изучаю Backbone, и я смешиваю некоторые вещи. Смешивание базы и Rails. –

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