2016-07-14 10 views
4

Ich habe eine Rails 5 API-Anwendung generiert. Aber ich möchte meine App mit Homepage. Dafür habe ich eine Heimsteuerung erzeugt und hinzugefügt View-Datei i jeweiligen Ansichten/home/index.html.erbRails 5 api nur App mit Homepage

Aber wenn ich es versucht, Zugriff erhalte ich unten Antwort

loszulegen „/ home/index "für 127.0.0.1 bei 2016-07-14 11:14:03 +0530 Verarbeitung von Homecontroller # index als HTML 204 in Kein Inhalt Completed 0ms

loszulegen "/home/index.js" für 127,0. 0.1 am 2016-07-14 11:14:20 +0530 Verarbeitung von HomeController # index als JS abgeschlossen 204 Kein Inhalt in 0ms

Aber ich konnte nicht Inhalt der Indexseite im Web angezeigt.

Bitte teilen Sie Ihre Gedanken.

Antwort

11

Ich war im selben Boot und versuchte, eine Rails 5 API-Anwendung zu erstellen, die immer noch von einer einzelnen HTML-Seite bootstrappen konnte (von JS beim Laden übernommen). Diebstahl einen Hauch von rails source, habe ich die folgenden Controller (beachten Sie, dass es Rails statt meinem ApplicationController für diesen einsamen Nicht-api-Controller ist mit)

require 'rails/application_controller' 

class StaticController < Rails::ApplicationController 
    def index 
    render file: Rails.root.join('public', 'index.html') 
    end 
end 

und legen Sie die entsprechende statische Datei (plain .html, nicht .html.erb) im Ordner public. Ich auch

hinzugefügt
get '*other', to: 'static#index' 

am Ende routes.rb (nach all meinen api Routen) für Reloads, Deep Links Erhaltung des clientseitigen Routing zu aktivieren usw.

Ohne Wurzel in routes.rb Einstellung, Rails direkt von öffentlichen auf Anrufe auf / dienen und wird den statischen Controller auf Nicht-API-Routen sonst treffen. Je nach Ihren Anwendungsfall, das Hinzufügen public/index.html (ohne Wurzel in routes.rb) könnte ausreichen, um, oder Sie können eine ähnliche Sache, ohne die ungeraden StaticController unter Verwendung

get '*other', to: redirect('/') 

stattdessen erreichen, wenn Sie nicht über Pfadbewahrungs egal .

Ich würde gerne wissen, ob jemand andere bessere Vorschläge hat.

+1

Schön! Ich hatte das gleiche Problem und du hast mir geholfen. Aber Sie brauchen keine Zeile "Layout falsch". –

+0

Schöner Fang, du hast Recht! –

1

Wenn alles, was Sie brauchen, ist nur eine statische HTML-Seite (mit einigen einfachen CSS/JS), ich denke, eine andere Methode ist nur die index.html Seite unter public Ordner bearbeiten.