Хорошо, мне нужны советы и лучшие практики от некоторых людей из Rails.
Я довольно плохо знаком с платформой, но раньше я занимался веб-разработкой на основе базы данных на Java. На данный момент я проработал около двадцати учебных пособий, и мне постоянно мешают в одном и том же месте.
Вот что я сделал и что я испытываю. Я создал новое приложение, используя
rails my_rails_app
Я создал свою схему и таблицы в MySQL и создал учетную запись для rails (rails_root / pass1234) и обновил config / database.yml, чтобы отразить новую учетную запись:
development:
adapter: mysql
encoding: utf8
reconnect: false
database: demo_development
username: rails_root
password: pass1234
host: localhost
На этом этапе я создаю каркас для таблицы «customer»:
ruby script/generate scaffold customer
Который успешно возвращается. Итак, теперь мы запускаем сервер:
ruby script/server
Который загружает Mongrel и запускает сервер, как и ожидалось, на порту 3000 на локальной машине. После направления браузера на http://localhost:3000/customers, на странице правильно написано «Список клиентов», но в нет полей, перечисленных . Когда я нажимаю ссылку для «нового клиента», все еще нет полей для изменения, но я могу создать пустую запись о клиенте. Так как эта операция помещает 'NULL' во все поля (некоторые из которых не могут иметь значение NULL), возникает ошибка Mysql - "имя столбца" не может быть NULL "с запросом SQL, который он пытался выполнить.
Я сбит с толку, главным образом, потому что, если он собирает мои поля в этот момент, почему он не отображает их раньше? Очевидно, он подключается к нужной базе данных и определил правильную таблицу. В чем дело?
Теперь, с другой стороны, если я помещаю записи в таблицу до запуска сервера, на странице теперь отображаются опции ссылок «Показать», «Редактировать» и «Уничтожить» под заголовком «Список клиентов». Однако поля или данные не отображаются. Если я нажму «Уничтожить», запись в таблице действительно будет уничтожена. Но я до сих пор не видел ни одной записи или поля на веб-странице, созданной rails, если только это не было сообщением об ошибке.
Это был вывод моей команды создания скаффолда:
\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
А вот основные сгенерированные файлы:
Приложение \ Контроллеры \ 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
приложение \ вид \ контакты \ 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 %>
приложение \ вид \ контакты \ show.html.erb
<%= link_to 'Edit', edit_contact_path(@contact) %> |
<%= link_to 'Back', contacts_path %>
приложение \ вид \ контакты \ 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 %>
приложение \ вид \ контакты \ 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 %>
Любой (дальнейший) совет будет принят с благодарностью!