aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
authorCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-06-27 08:46:00 -0700
committerCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-06-27 08:46:00 -0700
commit52f6e47682003c83b0466bf5e140ee302498a226 (patch)
treef2bb4fef4870ee285a90598efaf621b58d6ecbd0 /railties/lib
parentbb16b0ef7e999d79751869a61386702dd1aa88b4 (diff)
parent94b230e189e7241b96dcbfb41ceabedf7cfd14ac (diff)
downloadrails-52f6e47682003c83b0466bf5e140ee302498a226.tar.gz
rails-52f6e47682003c83b0466bf5e140ee302498a226.tar.bz2
rails-52f6e47682003c83b0466bf5e140ee302498a226.zip
Merge pull request #6856 from lexmag/polymorphic_generators
Add polymorphic option to model generator For instance, $ rails g model Product supplier:references{polymorphic} generate model with `belongs_to :supplier, polymorphic: true` association and appropriate migration.
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/rails/generators/generated_attribute.rb14
1 files changed, 12 insertions, 2 deletions
diff --git a/railties/lib/rails/generators/generated_attribute.rb b/railties/lib/rails/generators/generated_attribute.rb
index 25d0161e4c..d480fc12b5 100644
--- a/railties/lib/rails/generators/generated_attribute.rb
+++ b/railties/lib/rails/generators/generated_attribute.rb
@@ -35,7 +35,7 @@ module Rails
private
- # parse possible attribute options like :limit for string/text/binary/integer or :precision/:scale for decimals
+ # parse possible attribute options like :limit for string/text/binary/integer, :precision/:scale for decimals or :polymorphic for references/belongs_to
# when declaring options curly brackets should be used
def parse_type_and_options(type)
case type
@@ -43,6 +43,8 @@ module Rails
return $1, :limit => $2.to_i
when /decimal\{(\d+)[,.-](\d+)\}/
return :decimal, :precision => $1.to_i, :scale => $2.to_i
+ when /(references|belongs_to)\{polymorphic\}/
+ return $1, :polymorphic => true
else
return type, {}
end
@@ -92,13 +94,21 @@ module Rails
end
def index_name
- reference? ? "#{name}_id" : name
+ if reference?
+ polymorphic? ? %w(id type).map { |t| "#{name}_#{t}" } : "#{name}_id"
+ else
+ name
+ end
end
def reference?
self.class.reference?(type)
end
+ def polymorphic?
+ self.attr_options.has_key?(:polymorphic)
+ end
+
def has_index?
@has_index
end