2014-06-08 22 views
6

Continua a ricevere l'errore ActionController: UnknownFormat durante il tentativo di utilizzare respond_to e respond_with nel controller di rails. Errore nella riga successiva nel controller.Rails 4.1 ActionController :: UnknownFormat errore per respond_with utilizzando AngularJS

respond_with @surveys 

in/app/beni/controller/surveys_controller

respond_to :json 

def index 
    @surveys = Survey.all 
    respond_with @surveys 
end 

In /config/routes.rb

WebInsight::Application.routes.draw do 

    scope :api do 
     resources :surveys, defaults: {format: 'json'} 
    end 

    resources :surveys 
end 

In /app/assets/views/surveys/index.html .erb

<h1>Your Surveys</h1> 

<form> 
    <input type="text" ng-model='newSurvey' placeholder="Enter a survey"> 
    <input type="submit" value="Add"> 
</form> 

<div ng-controller="SurveysCtrl"> 
    <ul> 
     <li ng-repeat="survey in surveys"> 
      {{ survey.theme_id }}, {{ survey.name }}, {{ survey.description }} 
     </li> 
    </ul> 
</div> 

In/app/assets/javascri pts/angolare/controller/surveys_ctrl.js

app.controller('SurveysCtrl', ['$scope', '$resource', function($scope, $resource) { 
    var Surveys = $resource('/api/surveys'); 
    $scope.surveys = Surveys.query(); 
}]); 

risposta

1

risolto con la seguente modifica:

in/app/attività/controllers/surveys_controller, utilizzare

respond_to :json, :html 

invece di

respond_to :json 
+1

Una parola di cautela qui: Se si specifica answer_to: json,: html, significa che le rotaie continueranno a offrire l'output HTML utilizzando le rotaie, non angolare. Se vuoi che AngularJS serva tutto il contenuto HTML come front-end, mentre i rails gestiscono solo il back-end (come dovrebbe essere il caso per le app di 1 pagina), non devi abilitare 'answer_to: html'. Piuttosto, consulta il routing di AngularJS. [http://scotch.io/tutorials/javascript/single-page-apps-with-angularjs-routing-and-templating] –

2

si dice che abbia

respond_to :json 

è valido quando i percorsi definisce JSON come predefinito

scope :api, defaults: {format: :json} do 
    resources :resources 
end 

per non permettere il codice html nel controller è sufficiente aggiungere il seguente al metodo

def new 
    @resource = Resource.new 
    respond_with(@resource) do |format| 
    format.html { render nothing: true, status: :unauthorized } 
    format.json { render :json => @resource.as_json } 
    end 
end 
+0

Potrebbe aggiungere ulteriori dettagli sulla soluzione fornita? – abarisone

+0

ciao, volevo aumentare il tuo rappresentante del 1000% –

2

In /app/assets/controllers/surveys_controller si potrebbe cambiare respond_with a render json: così:

def index 
    @surveys = Survey.all 
    render json: @surveys 
end 

Questo ha funzionato per me usando Rails 4.1.5.

Problemi correlati