好吧,我需要一些Rails人员的建议和最佳实践。
我对这个平台还不熟悉,但我之前在Java中完成了数据库支持的Web开发工作。在这一点上,我已经完成了大约二十个教程,并且我一直在同一个地方受阻。
这就是我所做的和我正在经历的事情。我使用
创建了一个新的应用程序rails my_rails_app
我在MySQL中创建了我的架构和表格,并且我已经为rails创建了一个帐户(rails_root / pass1234)并更新了config / databases.yml以反映新帐户:
development:
adapter: mysql
encoding: utf8
reconnect: false
database: demo_development
username: rails_root
password: pass1234
host: localhost
此时,我为'customers'表生成了脚手架:
ruby script/generate scaffold customer
成功返回。所以现在我们启动服务器:
ruby script/server
启动Mongrel并在本地计算机的端口3000上按预期启动服务器。将浏览器定向到http://localhost:3000/customers后,页面会正确显示“列出客户”,但没有列出字段。当我按下“新客户”的链接时,仍然没有要修改的字段,但我可以创建一个空的客户记录。由于此操作在所有字段(其中一些不可为空)中放置'nulls',因此抛出了Mysql错误 - 使用它尝试运行的SQL查询,“column'name'不能为null”。
我很困惑主要是因为如果它在那时拾取我的字段,为什么它不提前显示它们?显然,它连接到正确的数据库,并确定了正确的表。这是什么交易?
另一方面,如果我在启动服务器之前将条目放入表中,页面现在会在“列出客户”标题下方显示“显示”,“编辑”和“销毁”链接选项。但是,没有反映任何字段或数据。如果我单击“Destroy”,表中的记录确实被破坏了。但我仍然没有看到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 %>
非常感谢任何(进一步)建议!
答案 0 :(得分:1)
我相信如果你在创建脚手架时指定它们,Rails只会为它在脚手架中创建的视图添加字段,即“script/generate scaffold post title:string body:text published:boolean
”(这也将为表创建数据库迁移)问题,顺便说一下)。我不认为它在脚手架期间对数据库进行任何检查,但我还没有深入研究脚手架生成代码。
答案 1 :(得分:0)
您是否为联系人模型编写了迁移?
Rails直接从数据库中读取字段,并根据表中的内容动态生成属性。如果您只运行脚手架生成器,则迁移仍为空。编写迁移后,您可以使用rake db:migrate
运行迁移,然后我相信字段应显示在支架中。