Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Generated migrations include timestamps by default. Closes #8501.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6883 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 06744bb4c5777cae45dca3b0ed4826ab14cbc558 1 parent 428d1f6
@jeremy jeremy authored
View
2  railties/CHANGELOG
@@ -1,5 +1,7 @@
*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]
View
9 railties/lib/rails_generator/generators/components/model/USAGE
@@ -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.
View
4 railties/lib/rails_generator/generators/components/model/templates/fixtures.yml
@@ -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) %>
View
1  railties/lib/rails_generator/generators/components/model/templates/migration.rb
@@ -4,6 +4,7 @@ def self.up
<% for attribute in attributes -%>
t.<%= attribute.type %> :<%= attribute.name %>
<% end -%>
+ t.timestamps
end
end
View
11 railties/lib/rails_generator/generators/components/resource/USAGE
@@ -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
View
29 railties/lib/rails_generator/generators/components/scaffold/USAGE
@@ -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
View
13 railties/test/generators/generator_test_helper.rb
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.