2016-11-09 1 views
0

Ich bin neu bei Ruby on Rails. Versuchen, ein Starter-Projekt nach dem Vorbild the simple "Rotten Potatoes" sample app aus dem populären MOOC-Lehrbuch Engineering Software as a Service zu erstellen. Der Beispielcode aus dem Buch funktioniert gut (duh), aber wenn ich versuche, einige Änderungen vorzunehmen, bekomme ich seltsames Verhalten. Ich verwende Rails 5.0.0.1, das ist nicht, was das Buch verwendet!Einfacher Ruby on Rails-Datenbankaufruf erfolgreich, aber Seite nicht ausgefüllt

Ich versuche, eine einfache Datenbank zu lesen und die Ergebnisse in einer Tabelle anzuzeigen. Die Seite, die ich generiere, hat die richtige Anzahl von Zeilen in der Tabelle, daher weiß ich, dass es eine erfolgreiche Datenbankverbindung gibt. Auch wenn ich der Datenbank mehr Beispieldaten hinzufüge und die App neu lade, zeigt die Seite die neue korrekte Anzahl von Tabellenzeilen an. Der Fehler besteht jedoch darin, dass die Tabellenzellen nicht mit Daten gefüllt werden.

Ich benutze MVC. Mein Code:

Model, person.rb:

class Person < ActiveRecord::Base 
# attr_accessor :name, :email, :ID 
# The above line is equally as broken as the current state 

# attr_accessible :name, :email, :ID 
# Something like this is what was used in the original Rotten Potatoes 
# Cannot use attr_accessible in Rails 5... must use strong parameters instead? 
# https://github.com/rails/strong_parameters 
end 

Controller people_controller.rb:

class PeopleController < ApplicationController 
    def index 
     @people = Person.all 
    end 

    private 
     def person_params 
      params.require(:person).permit(:name, :email, :id) 
     end 
end 

Ansicht, index.html.haml:

%table#people 
    %thead 
    %tr 
     %th Name 
     %th E-mail address 
     %th ID 
     %th Edit 
    %tbody 
    - @people.each do |person| 
     %tr 
     %td= person.name 
     %td= person.email 
     %td= person.ID 
     %td= link_to "Edit", edit_person_path(person) 

Actual resultierenden erzeugten HTML:

<table id='people'> 
    <thead> 
    <tr> 
     <th>Name</th> 
     <th>E-mail</th> 
     <th>ID</th> 
     <th>Edit</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td><a href="/people/1/edit">Edit</a></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td><a href="/people/2/edit">Edit</a></td> 
    </tr> 
    ... 

Wunsch erzeugte HTML:

<table id='people'> 
    <thead> 
    <tr> 
     <th>Name</th> 
     <th>E-mail</th> 
     <th>ID</th> 
     <th>Edit</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td>John Q. Tester</td> 
     <td>[email protected]</td> 
     <td>0001</td> 
     <td><a href="/people/1/edit">Edit</a></td> 
    </tr> 
    <tr> 
     <td>Testy D. Smith</td> 
     <td>[email protected]</td> 
     <td>0002</td> 
     <td><a href="/people/2/edit">Edit</a></td> 
    </tr> 
    ... 

Zuerst war ich attr_accessible im Modell. Aber ich habe einen Fehler bekommen und die Nachricht schlug stattdessen attr_accessor vor. Also habe ich es geändert und die App lief ohne Fehler, aber die Daten wurden nicht in der Tabelle angezeigt. Dann habe ich herausgefunden, dass Rails 4 stopped supporting attr_accessible and it was replaced by strong parameters. Also habe ich versucht, diese zu benutzen, aber es hat die Ergebnisse nicht verbessert. Ich weiß nicht, ob ich das falsche Ding ausprobiert habe oder ob ich auf dem richtigen Weg bin und es einfach falsch gemacht habe.

Entschuldigung, wenn dies nicht genug Informationen sind. Bitte sag es mir einfach und ich werde mein Bestes geben um es zu aktualisieren. An diesem Punkt weiß ich nicht, was für MCVE für Ruby on Rails überhaupt relevant ist.

EDIT:

Rails Konsolenausgabe:

2.3.0 :005 > @people = Person.all 
    Person Load (0.3ms) SELECT "people".* FROM "people" 
=> #<ActiveRecord::Relation [#<Person id: 1, name: nil, ID: nil, email: nil, created_at: "2016-11-08 08:14:17", updated_at: "2016-11-08 08:14:17">, #<Person id: 2, name: nil, ID: nil, email: nil, created_at: "2016-11-08 08:14:17", updated_at: "2016-11-08 08:14:17">, ...]> 
+0

ist Ihr '@people = Person.all' zurückkehrendes Sammlungsobjekt? check it in rails console – sa77

+0

@ sa77 Entschuldigung für die Verzögerung, ich musste lernen, was Rails-Konsole war ... die Ausgabe war sehr interessant, ich habe es in den Post editiert, um die Formatierung zu bewahren, aber die kurze Version ist alle Daten ist Null ... bin mir nicht sicher, ob die Datenbank falsch gesetzt wird oder ob die Abfrage selbst irgendwie kaputt ist, aber ich lehne mich an die Aussaat an ... –

+0

Es ist Ihr Problem .. DB bezogen .. Ihre Schienen Codebase sieht gut aus – sa77

Antwort

0

Nun sind Sie auf einem richtigen Weg attr_accessible wurde von Schienen 4 und nun entfernt verwendet es starke Parameter.

class PeopleController < ApplicationController 
    def index 
     @people = Person.all 
    end 

    private 
     def person_params 

      params.require(:person).permit(:name, :email,:ID) 
     end 
end 

Create some records from rails console 

People.create(name: "anik",email: "[email protected]",ID: 2) 

Sie haben noch keine in der Datenbank eingefügt Datensätze, die ist, warum es jetzt jede records.Firstly zeigt Ihnen durch Schienen Konsole einlegen müssen Sie sicher, dass das, was Datentyp Sie für die Spalte verwendet haben, beim Einfügen Datensätze in der Datenbank

Verwandte Themen