提交 06744bb4 编写于 作者: J Jeremy Kemper

Generated migrations include timestamps by default. Closes #8501.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6883 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 428d1f67
*SVN*
* Generated migrations include timestamps by default. #8501 [shane]
* Drop Action Web Service from rails:freeze:edge. [Jeremy Kemper]
* Add db:create, drop, reset, charset, and collation tasks. #8448 [matt]
......
......@@ -5,8 +5,9 @@ Description:
should not be suffixed with 'Model'.
As additional parameters, the generator will take attribute pairs described by name and type. These attributes will
be used to prepopulate the migration to create the table for the model and give you a set of predefined fixture.
You don't have to think up all attributes up front, but it's a good idea of adding just the baseline of what's
be used to prepopulate the migration to create the table for the model and give you a set of predefined fixture. By
default, created_at and updated_at timestamps are added to migration for you, so you needn't specify them by hand.
You don't have to think up all attributes up front, but it's a good idea of adding just the baseline of what's
needed to start really working with the resource.
The generator creates a model class in app/models, a test suite in test/unit, test fixtures in
......@@ -21,6 +22,6 @@ Examples:
Fixtures: test/fixtures/accounts.yml
Migration: db/migrate/XXX_add_accounts.rb
./script/generate model post title:string created_on:date body:text published:boolean
./script/generate model post title:string body:text published:boolean
Creates post model with predefined attributes.
......@@ -4,8 +4,12 @@ one:
<% for attribute in attributes -%>
<%= attribute.name %>: <%= attribute.default %>
<% end -%>
created_at: <%= Time.now.to_s(:db) %>
updated_at: <%= Time.now.to_s(:db) %>
two:
id: 2
<% for attribute in attributes -%>
<%= attribute.name %>: <%= attribute.default %>
<% end -%>
created_at: <%= Time.now.to_s(:db) %>
updated_at: <%= Time.now.to_s(:db) %>
......@@ -4,6 +4,7 @@ def self.up
<% for attribute in attributes -%>
t.<%= attribute.type %> :<%= attribute.name %>
<% end -%>
t.timestamps
end
end
......
......@@ -10,8 +10,11 @@ Description:
As additional parameters, the generator will take attribute pairs
described by name and type. These attributes will be used to
prepopulate the migration to create the table for the model. For
example, "resource post title:string created_on:date body:text
published:boolean" will give you a Post model with those four attributes.
example, "resource post title:string body:text published:boolean" will
give you a Post model with those three attributes.
By default, created_at and updated_at timestamps are added to migration
for you, so you needn't specify them by hand.
You don't have to think up all attributes up front, but it's a good
idea of adding just the baseline of what's needed to start really
......@@ -26,5 +29,5 @@ Description:
Examples:
./script/generate resource post # no attributes
./script/generate resource post title:string created_on:date body:text published:boolean
./script/generate resource purchase order_id:integer created_at:datetime amount:decimal
./script/generate resource post title:string body:text published:boolean
./script/generate resource purchase order_id:integer amount:decimal
......@@ -6,32 +6,35 @@ Description:
(GET/POST/PUT/DELETE) and is prepared for multi-client access (like one
view for HTML, one for an XML API, one for ATOM, etc). Everything comes
with sample unit and functional tests as well.
The generator takes the name of the model as its first argument. This
model name is then pluralized to get the controller name. So
"scaffold post" will generate a Post model and a
PostsController and will be intended for URLs like /posts and
/posts/45.
As additional parameters, the generator will take attribute pairs
described by name and type. These attributes will be used to
prepopulate the migration to create the table for the model and to give
you a set of templates for the view. For example, "scaffold
post title:string created_on:date body:text published:boolean" will
give you a model with those four attributes, forms to create and edit
those models from, and an index that'll list them all.
you a set of templates for the view. For example, "scaffold post
title:string body:text published:boolean" will give you a model with
those three attributes, forms to create and edit those models from,
and an index that'll list them all.
By default, created_at and updated_at timestamps are added to migration
for you, so you needn't specify them by hand.
You don't have to think up all attributes up front, but it's a good
idea of adding just the baseline of what's needed to start really
working with the resource.
The generator also adds a declaration to your config/routes.rb file
to hook up the rules that'll point URLs to this new resource. If you
to hook up the rules that'll point URLs to this new resource. If you
create a resource like "scaffold post", it will add
"map.resources :posts" (notice the plural form) in the routes file,
making your new resource accessible from /posts.
"map.resources :posts" (notice the plural form) in the routes file,
making your new resource accessible from /posts.
Examples:
./script/generate scaffold post # no attributes, view will be anemic
./script/generate scaffold post title:string created_on:date body:text published:boolean
./script/generate scaffold purchase order_id:integer created_at:datetime amount:decimal
./script/generate scaffold post title:string body:text published:boolean
./script/generate scaffold purchase order_id:integer amount:decimal
......@@ -128,6 +128,7 @@ def assert_generated_yaml(path)
# the parsed yaml tree is passed to a block.
def assert_generated_fixtures_for(name)
assert_generated_yaml "test/fixtures/#{name.to_s.underscore}" do |yaml|
assert_generated_timestamps(yaml)
yield yaml if block_given?
end
end
......@@ -147,7 +148,8 @@ def assert_generated_views_for(name,*actions)
# It takes the name of the migration as a parameter.
# the migration body is passed to a block.
def assert_generated_migration(name,parent="ActiveRecord::Migration")
assert_generated_class "db/migrate/001_#{name.to_s.underscore}",parent do |body|
assert_generated_class "db/migrate/001_#{name.to_s.underscore}",parent do |body|
assert body=~/timestamps/, "should have timestamps defined"
yield body if block_given?
end
end
......@@ -174,4 +176,13 @@ def assert_generated_column(body,name,type)
assert body=~/t\.#{type.to_s} :#{name.to_s}/, "should have column #{name.to_s} defined"
end
private
# asserts that the default timestamps are created in the fixture
def assert_generated_timestamps(yaml)
yaml.values.each do |v|
["created_at", "updated_at"].each do |field|
assert v.keys.include?(field), "should have #{field} field by default"
end
end
end
end
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册