2015-07-20 2 views
0

Я пытаюсь передать Angular JS и Ruby on Rails для обмена некоторыми данными в примере приложения.Метод ответов в Ruby on Rails

я создал ресурс под названием Entries, и сделал этот контроллер:

class EntriesController < ApplicationController 
    respond_to :json 
    def index 
    respond_with Entry.all 
    end 
    def show 
    respond_with Entry.find(params[:id]) 
    end 
    def create 
    respond_with Entry.create(params[:entry]) 
    end 
    def update 
    respond_with Entry.update(params[:id], params[:entry]) 
    end 
    def destroy 
    respond_with Entry.destroy(params[:id]) 
    end 
end 

Это генерирует ответ в JSON с данными Entries. Я населил Entries баз данных:

# This file should contain all the record creation needed to seed the database with its default values. 
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). 
# 
# Examples: 
# 
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) 
# Mayor.create(name: 'Emanuel', city: cities.first) 

Entry.create!(name: "name1") 
Entry.create!(name: "name2") 
Entry.create!(name: "name3") 
Entry.create!(name: "name4") 
Entry.create!(name: "name5") 
Entry.create!(name: "name6") 
Entry.create!(name: "name7") 

я создал несколько записей. Мне нужно, чтобы Угловая получала их. Это мой JS файл:

var rafflerApp = angular.module('rafflerApp', ["ngResource"]); 

rafflerApp.controller('RaffleCtrl', function ($scope, $resource) { 

    //entries list 
    Entry = $resource("/entries/:id", {id: "@id"}, {update: {method: "PUT"}}) 
    $scope.entries = Entry.query(); 

    //add a name to the list 
    $scope.addEntry = function(entry){ 
    entry = Entry.save($scope.newEntry); 
    $scope.entries.push(entry); 
    $scope.newEntry = {} 
    } 

    //draw a winner 
    $scope.selectWinner = function(draw){ 
    pool = []; 
    angular.forEach($scope.entries, function(entry){ 
     if (!entry.winner){ 
      pool.push(entry) 
     } 
    }); 
    if (pool.length > 0){ 
     entry = pool[Math.floor(Math.random()*pool.length)] 
     entry.winner = true 
     entry.$update(entry) 
     $scope.lastWinner = entry 
    } 
    } 
}); 

Если я пытаюсь приложение, я не получаю никаких Js ошибок, но список пуст. Если я пытаюсь перейти к /entries/(casual :id), я получаю эту ошибку:

ActionController::UnknownFormat in EntriesController#index 

и выделяет эту часть кода:

def index 
    respond_with Entry.all 
end 

Почему я получаю эту ошибку? Как я могу позволить Ruby on Rails передавать данные с помощью Angular JS? Я также добавлять мой файл маршрутов:

Rails.application.routes.draw do 
    resources :entries 
    root to: "raffle#index" 
end 
+0

вы пытались посетить LOCALHOST: 3000/entries.json из браузера? –

+1

показать файл 'config/routes.rb' –

+0

@SahilGrover да, я попытался перейти к моему браузеру, и он работал – giovaZ

ответ

1

Обновление вашего route.rb для отображения JSON по умолчанию вместо HTML

resources :entities, defaults: {format: :json} 
+0

, он все еще не работает. сделав некоторые тесты, я проверил, что в журнале консоли это сообщение обновляется на странице [HTTP/1.1 406 Not Acceptable], когда я пытаюсь восстановить данные из http: // localhost: 3000/entries. – giovaZ

+0

Какие заголовки передаются с запросом? – RAJ

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