aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2012-12-09 15:20:32 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-12-10 00:01:41 -0300
commitb05b77be9caf2617f35d93786d9b40c17e07bf64 (patch)
treefa5239f88c3f008c0a35ec649e8d2925038fd679 /railties/lib
parent4a487f94b9812964e644716f301ab287dea8cddc (diff)
downloadrails-b05b77be9caf2617f35d93786d9b40c17e07bf64.tar.gz
rails-b05b77be9caf2617f35d93786d9b40c17e07bf64.tar.bz2
rails-b05b77be9caf2617f35d93786d9b40c17e07bf64.zip
Deal with polymorphic attributes correctly in the generators
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb9
-rw-r--r--railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb4
-rw-r--r--railties/lib/rails/generators/test_unit/model/templates/fixtures.yml2
-rw-r--r--railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb16
4 files changed, 24 insertions, 7 deletions
diff --git a/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb b/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb
index 4f36b612ae..3cfd2233e2 100644
--- a/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb
+++ b/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb
@@ -22,6 +22,15 @@ module Rails
hook_for :helper, as: :scaffold do |invoked|
invoke invoked, [ controller_name ]
end
+
+ private
+
+ def attributes_names
+ attributes.each_with_object([]) do |attribute, names|
+ names << (attribute.reference? ? ":#{attribute.name}_id" : ":#{attribute.name}")
+ names << ":#{attribute.name}_type" if attribute.polymorphic?
+ end
+ end
end
end
end
diff --git a/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb b/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb
index 5fc93efc6d..078ca3a996 100644
--- a/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb
+++ b/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb
@@ -91,10 +91,10 @@ class <%= controller_class_name %>Controller < ApplicationController
# Use this method to whitelist the permissible parameters. Example: params.require(:person).permit(:name, :age)
# Also, you can specialize this method with per-user checking of permissible attributes.
def <%= "#{singular_table_name}_params" %>
- <%- if attributes.empty? -%>
+ <%- if attributes_names.empty? -%>
params[<%= ":#{singular_table_name}" %>]
<%- else -%>
- params.require(<%= ":#{singular_table_name}" %>).permit(<%= attributes.map { |a| ":#{a.index_name}" }.join(', ') %>)
+ params.require(<%= ":#{singular_table_name}" %>).permit(<%= attributes_names.join(', ') %>)
<%- end -%>
end
end
diff --git a/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml b/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml
index 71f4f99d02..7f29932ceb 100644
--- a/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml
+++ b/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml
@@ -4,11 +4,13 @@
one:
<% attributes.each do |attribute| -%>
<%= attribute.reference? ? "#{attribute.name}_id" : attribute.name %>: <%= attribute.default %>
+ <%= "#{attribute.name}_type: #{attribute.human_name}" if attribute.polymorphic? %>
<% end -%>
two:
<% attributes.each do |attribute| -%>
<%= attribute.reference? ? "#{attribute.name}_id" : attribute.name %>: <%= attribute.default %>
+ <%= "#{attribute.name}_type: #{attribute.human_name}" if attribute.polymorphic? %>
<% end -%>
<% else -%>
# This model initially had no columns defined. If you add columns to the
diff --git a/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb b/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb
index 8939813304..08bf50dfe2 100644
--- a/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb
+++ b/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb
@@ -20,11 +20,17 @@ module TestUnit # :nodoc:
def attributes_hash
return if attributes.empty?
- attributes.map do |a|
- name = a.name
- name = "#{name}_id" if a.reference?
- "#{name}: @#{singular_table_name}.#{name}"
- end.sort.join(', ')
+ hash_values = []
+ attributes.each do |a|
+ hash_values << hash_value(a.reference? ? "#{a.name}_id" : a.name)
+ hash_values << hash_value("#{a.name}_type") if a.polymorphic?
+ end
+
+ hash_values.sort.join(', ')
+ end
+
+ def hash_value(name)
+ "#{name}: @#{singular_table_name}.#{name}"
end
end
end