In Ordnung, ich brauche einige Ratschläge und Best Practices von einigen Rails Menschen.Web-Service mit Rails + MySql Best Practices
Ich bin ziemlich neu auf der Plattform, aber ich habe Datenbank-basierte Web-Entwicklungsarbeit zuvor in Java getan. An diesem Punkt habe ich ungefähr zwanzig Tutorials durchgearbeitet, und ich werde immer wieder am selben Ort behindert.
Hier ist, was ich getan habe und was ich erlebe. Ich habe eine neue Anwendung
rails my_rails_app
mit erstellt
Ich habe mein Schema und Tabellen in MySQL erstellt, und ich habe ein Konto für Schienen (RAILS_ROOT/pass1234) und aktualisierte config/databases.yml erstellt die widerzuspiegeln neues Konto:
development:
adapter: mysql
encoding: utf8
reconnect: false
database: demo_development
username: rails_root
password: pass1234
host: localhost
An dieser Stelle erzeugen ich das Gerüst für die Tabelle ‚Kunden‘:
ruby script/generate scaffold customer
die erfolgreich zurückgibt. So, jetzt starten wir den Server:
ruby script/server
Welche Mischlings bootet und startet den Server bis zum Port 3000 auf dem lokalen Rechner zu erwarten. Nachdem der Browser auf http://localhost:3000/customers gerichtet wurde, wird auf der Seite korrekt "Kunden auflisten" angezeigt, aber enthält keine Felder. Wenn ich den Link für "Neukunde" drücke, gibt es noch keine Felder zu ändern, aber ich darf einen leeren Kundendatensatz erstellen. Da diese Operation Nullen in allen Feldern platziert (von denen einige nicht nullbar sind), wird ein Mysql-Fehler ausgelöst - "Spaltenname kann nicht null sein" mit der SQL-Abfrage, die versucht wurde auszuführen.
Ich bin hauptsächlich verwirrt, weil, wenn es meine Felder an diesem Punkt abholt, warum zeigt es sie früher nicht an? Offensichtlich verbindet es sich mit der richtigen Datenbank und hat die richtige Tabelle identifiziert. Was ist das Problem?
Nun, auf der anderen Seite, wenn ich Einträge in die Tabelle vor dem Starten des Servers platzieren, zeigt die Seite jetzt "Show", "Edit" und "Destroy" Link-Optionen unter dem "Listing customers" Header. Es werden jedoch keine Felder oder Daten wiedergegeben. Wenn ich auf "Zerstören" klicke, wird der Datensatz in der Tabelle tatsächlich zerstört. Aber ich habe immer noch keine der Datensätze oder Felder auf einer von Rails generierten Webseite gesehen, es sei denn, es handelt sich um eine Fehlermeldung.
Dies war die Ausgabe von meinem erzeugen Gerüst Befehl:
\ROR\my_app>ruby script/generate scaffold contact
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/contacts
exists app/views/layouts/
exists test/functional/
exists test/unit/
create test/unit/helpers/
exists public/stylesheets/
create app/views/contacts/index.html.erb
create app/views/contacts/show.html.erb
create app/views/contacts/new.html.erb
create app/views/contacts/edit.html.erb
create app/views/layouts/contacts.html.erb
create public/stylesheets/scaffold.css
create app/controllers/contacts_controller.rb
create test/functional/contacts_controller_test.rb
create app/helpers/contacts_helper.rb
create test/unit/helpers/contacts_helper_test.rb
route map.resources :contacts
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/contact.rb
create test/unit/contact_test.rb
create test/fixtures/contacts.yml
create db/migrate
create db/migrate/20090414185634_create_contacts.rb
Und hier sind die wichtigsten Dateien generiert:
app \ Controller \ contacts_controller.rb
class ContactsController < ApplicationController
# GET /contacts
# GET /contacts.xml
def index
@contacts = Contact.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @contacts }
end
end
# GET /contacts/1
# GET /contacts/1.xml
def show
@contact = Contact.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @contact }
end
end
# GET /contacts/new
# GET /contacts/new.xml
def new
@contact = Contact.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @contact }
end
end
# GET /contacts/1/edit
def edit
@contact = Contact.find(params[:id])
end
# POST /contacts
# POST /contacts.xml
def create
@contact = Contact.new(params[:contact])
respond_to do |format|
if @contact.save
flash[:notice] = 'Contact was successfully created.'
format.html { redirect_to(@contact) }
format.xml { render :xml => @contact, :status => :created, :location => @contact }
else
format.html { render :action => "new" }
format.xml { render :xml => @contact.errors, :status => :unprocessable_entity }
end
end
end
# PUT /contacts/1
# PUT /contacts/1.xml
def update
@contact = Contact.find(params[:id])
respond_to do |format|
if @contact.update_attributes(params[:contact])
flash[:notice] = 'Contact was successfully updated.'
format.html { redirect_to(@contact) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @contact.errors, :status => :unprocessable_entity }
end
end
end
# DELETE /contacts/1
# DELETE /contacts/1.xml
def destroy
@contact = Contact.find(params[:id])
@contact.destroy
respond_to do |format|
format.html { redirect_to(contacts_url) }
format.xml { head :ok }
end
end
end
app \ Ansichten \ contacts \ index.html.erb
<h1>Listing contacts</h1>
<table>
<tr>
</tr>
<% @contacts.each do |contact| %>
<tr>
<td><%= link_to 'Show', contact %></td>
<td><%= link_to 'Edit', edit_contact_path(contact) %></td>
<td><%= link_to 'Destroy', contact, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New contact', new_contact_path %>
app \ Ansichten \ Kontakte \ show.html.erb
<%= link_to 'Edit', edit_contact_path(@contact) %> |
<%= link_to 'Back', contacts_path %>
app \ Ansichten \ Kontakte \ new.html.erb
<h1>New contact</h1>
<% form_for(@contact) do |f| %>
<%= f.error_messages %>
<p>
<%= f.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Back', contacts_path %>
app \ Ansichten \ Kontakte \ edit.html.erb
<h1>Editing contact</h1>
<% form_for(@contact) do |f| %>
<%= f.error_messages %>
<p>
<%= f.submit 'Update' %>
</p>
<% end %>
<%= link_to 'Show', @contact %> |
<%= link_to 'Back', contacts_path %>
Jede (weitere) Beratung wäre sehr willkommen!
Es hört sich an, als ob Ihr Gerüst nicht ordnungsgemäß erzeugt wurde. Können Sie den erstellten Code posten? –
Absolut. Ich habe die von ihr generierte Quelle gepostet. Es sieht so aus als ob "show.html.erb" nicht viel macht! Danke, und lassen Sie mich bitte wissen, wenn etwas auf Sie springt. –