diff --git a/railties/CHANGELOG b/railties/CHANGELOG index c92fcb67605083c1899f2536c89616149c3df050..c8c0fa540a206db465aee875c0a6f07c6facc5e7 100644 --- a/railties/CHANGELOG +++ b/railties/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Improved the generated scaffold code a lot to take advantage of recent Rails developments #882 [Tobias Luetke] + * Combined the script/environment.rb used for gems and regular files version. If vendor/rails/* has all the frameworks, then files version is used, otherwise gems #878 [Nicholas Seckar] * Changed .htaccess to allow dispatch.* to be called from a sub-directory as part of the push with Action Pack to make Rails work on non-vhost setups #826 [Nicholas Seckar/Tobias Luetke] diff --git a/railties/lib/rails_generator/generators/components/model/USAGE b/railties/lib/rails_generator/generators/components/model/USAGE index f0669104fec152a220781c513aa59355aa4742b1..9d5a2fd749c6f83c7cd497e34d99bb127cf5efe5 100644 --- a/railties/lib/rails_generator/generators/components/model/USAGE +++ b/railties/lib/rails_generator/generators/components/model/USAGE @@ -5,7 +5,7 @@ Description: given in CamelCase or under_score and should not be suffixed with 'Model'. The generator creates a model class in app/models, a test suite in - test/unit, and test fixtures in test/fixtures/model_name.yml. + test/unit, and test fixtures in test/fixtures/singular_name.yml. Example: ./script/generate model Account diff --git a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb index 67f17dc87417430226716f3cd5e9520f53690226..6307a73e4336de8ce2181fb1687571d6faa9a09e 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +++ b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb @@ -6,6 +6,11 @@ class ScaffoldingSandbox def sandbox_binding binding end + + def default_input_block + Proc.new { |record, column| "


\n#{input(record, column.name)}

\n" } + end + end class ActionView::Helpers::InstanceTag @@ -54,7 +59,7 @@ def initialize(runtime_args, runtime_options = {}) def manifest record do |m| # Depend on model generator but skip if the model exists. - m.dependency 'model', [@name], :collision => :skip + m.dependency 'model', [singular_name], :collision => :skip # Check for class naming collisions. m.class_collisions controller_class_path, "#{controller_class_name}Controller", "#{controller_class_name}ControllerTest", "#{controller_class_name}Helper" @@ -97,19 +102,16 @@ def manifest end # Scaffolded forms. - scaffold_forms.each do |action| - m.complex_template "view_#{action}.rhtml", - File.join('app/views', - controller_class_path, - controller_file_name, - "#{action}.rhtml"), - :assigns => { :action => action }, - :insert => 'form.rhtml', - :sandbox => lambda { create_sandbox(action) }, - :begin_mark => 'form', - :end_mark => 'eoform', - :mark_id => singular_name - end + m.complex_template "form.rhtml", + File.join('app/views', + controller_class_path, + controller_file_name, + "_form.rhtml"), + :insert => 'form_scaffolding.rhtml', + :sandbox => lambda { create_sandbox }, + :begin_mark => 'form', + :end_mark => 'eoform', + :mark_id => singular_name # Unscaffolded views. unscaffolded_actions.each do |action| @@ -130,16 +132,16 @@ def banner end def scaffold_views - %w(list show) - end - - def scaffold_forms - %w(new edit) + %w(list show new edit) end def scaffold_actions scaffold_views + %w(index create update destroy) end + + def model_name + class_name.demodulize + end def unscaffolded_actions args - scaffold_actions @@ -149,10 +151,8 @@ def suffix "_#{singular_name}" if options[:suffix] end - def create_sandbox(action) + def create_sandbox sandbox = ScaffoldingSandbox.new - action = if action == 'edit' then 'update' else 'create' end - sandbox.form_action = action sandbox.singular_name = singular_name begin sandbox.model_instance = model_instance @@ -164,7 +164,7 @@ def create_sandbox(action) sandbox.suffix = suffix sandbox end - + def model_instance base = class_nesting.split('::').inject(Object) do |base, nested| break base.const_get(nested) if base.const_defined?(nested) diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb b/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb index c5e6d87210372b0871546a5ba542017e71fd7336..b3190918bd16a314cb37769dbd575d436da75bc8 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb @@ -12,21 +12,21 @@ def <%= action %><%= suffix %> <% end -%> def list<%= suffix %> - @<%= plural_name %> = <%= class_name %>.find_all + @<%= plural_name %> = <%= model_name %>.find_all end def show<%= suffix %> - @<%= singular_name %> = <%= class_name %>.find(@params['id']) + @<%= singular_name %> = <%= model_name %>.find(@params[:id]) end def new<%= suffix %> - @<%= singular_name %> = <%= class_name %>.new + @<%= singular_name %> = <%= model_name %>.new end def create<%= suffix %> - @<%= singular_name %> = <%= class_name %>.new(@params['<%= singular_name %>']) + @<%= singular_name %> = <%= model_name %>.new(@params[:<%= singular_name %>]) if @<%= singular_name %>.save - flash['notice'] = '<%= class_name %> was successfully created.' + flash['notice'] = '<%= model_name %> was successfully created.' redirect_to :action => 'list<%= suffix %>' else render_action 'new<%= suffix %>' @@ -34,21 +34,21 @@ def create<%= suffix %> end def edit<%= suffix %> - @<%= singular_name %> = <%= class_name %>.find(@params['id']) + @<%= singular_name %> = <%= model_name %>.find(@params[:id]) end def update - @<%= singular_name %> = <%= class_name %>.find(@params['<%= singular_name %>']['id']) - if @<%= singular_name %>.update_attributes(@params['<%= singular_name %>']) - flash['notice'] = '<%= class_name %> was successfully updated.' - redirect_to :action => 'show<%= suffix %>', :id => @<%= singular_name %>.id + @<%= singular_name %> = <%= model_name %>.find(@params[:id]) + if @<%= singular_name %>.update_attributes(@params[:<%= singular_name %>]) + flash['notice'] = '<%= model_name %> was successfully updated.' + redirect_to :action => 'show<%= suffix %>', :id => @<%= singular_name %> else render_action 'edit<%= suffix %>' end end def destroy<%= suffix %> - <%= class_name %>.find(@params['id']).destroy + <%= model_name %>.find(@params[:id]).destroy redirect_to :action => 'list<%= suffix %>' end end diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/form.rhtml b/railties/lib/rails_generator/generators/components/scaffold/templates/form.rhtml index d314c5f6b5e3577c0f703efbcf7d419bd0093428..d15f0d4ec2f2a7d53323fa7661119b9ca6be3e13 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/form.rhtml +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/form.rhtml @@ -1,5 +1,3 @@ -<%%= start_form_tag :action => '<%= @form_action %><%= @suffix %>' %> -<%%= hidden_field '<%= @singular_name %>', 'id' %> -<%= all_input_tags(@model_instance, @singular_name, {}) %> - -<%%= end_form_tag %> +<%%= error_messages_for '<%= singular_name %>' %> + +<%= template_for_inclusion %> diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb b/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb index cbd89d1b4c7212039b1a8dc7cdac5eb58f701478..c1b934a5d385f4dfda8682100e0a92347951e8c8 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb @@ -1,4 +1,4 @@ -require File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../test_helper' +require File.dirname(__FILE__) + '<%= "/.." * controller_class_nesting_depth %>/../test_helper' require '<%= controller_file_path %>_controller' # Re-raise errors caught by the controller. @@ -15,66 +15,66 @@ def setup <% for action in unscaffolded_actions -%> def test_<%= action %> - process :<%= action %> + get :<%= action %> assert_rendered_file '<%= action %>' end <% end -%> <% unless suffix -%> def test_index - process :index + get :index assert_rendered_file 'list' end <% end -%> def test_list<%= suffix %> - process :list<%= suffix %> + get :list<%= suffix %> assert_rendered_file 'list<%= suffix %>' assert_template_has '<%= plural_name %>' end def test_show<%= suffix %> - process :show<%= suffix %>, 'id' => 1 + get :show<%= suffix %>, 'id' => 1 assert_rendered_file 'show' assert_template_has '<%= singular_name %>' assert_valid_record '<%= singular_name %>' end def test_new<%= suffix %> - process :new<%= suffix %> + get :new<%= suffix %> assert_rendered_file 'new<%= suffix %>' assert_template_has '<%= singular_name %>' end def test_create - num_<%= plural_name %> = <%= class_name %>.find_all.size + num_<%= plural_name %> = <%= model_name %>.find_all.size - process :create<%= suffix %>, '<%= singular_name %>' => { } + post :create<%= suffix %>, '<%= singular_name %>' => { } assert_redirected_to :action => 'list<%= suffix %>' - assert_equal num_<%= plural_name %> + 1, <%= class_name %>.find_all.size + assert_equal num_<%= plural_name %> + 1, <%= model_name %>.find_all.size end def test_edit<%= suffix %> - process :edit<%= suffix %>, 'id' => 1 + get :edit<%= suffix %>, 'id' => 1 assert_rendered_file 'edit<%= suffix %>' assert_template_has '<%= singular_name %>' assert_valid_record '<%= singular_name %>' end def test_update<%= suffix %> - process :update<%= suffix %>, '<%= singular_name %>' => { 'id' => 1 } + post :update<%= suffix %>, 'id' => 1 assert_redirected_to :action => 'show<%= suffix %>', :id => 1 end def test_destroy<%= suffix %> - assert_not_nil <%= class_name %>.find(1) + assert_not_nil <%= model_name %>.find(1) - process :destroy, 'id' => 1 + post :destroy, 'id' => 1 assert_redirected_to :action => 'list<%= suffix %>' assert_raise(ActiveRecord::RecordNotFound) { - <%= singular_name %> = <%= class_name %>.find(1) + <%= singular_name %> = <%= model_name %>.find(1) } end end diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml b/railties/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml index c4815bd0a38f8565dcceab1897ae554e0c8210c0..4fb704219a696bb16f3d8e08227632f12f406867 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml @@ -1,7 +1,7 @@ <%= controller_class_name %>: <%%= controller.action_name %> - + <%%= stylesheet_link_tag 'scaffold' %> diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml b/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml index 4ad70f537a6dc3fd5efb53ac3382e6d21b27cebf..d932095f93c02562f3ef6ca16b3049cb81e44bed 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml @@ -1,7 +1,12 @@

Editing <%= singular_name %>

<%%= error_messages_for '<%= singular_name %>' %> -<%= template_for_inclusion %> -<%%= link_to 'Show', :action => 'show<%= suffix %>', :id => @<%= singular_name %>.id %> | +<%%= start_form_tag :action => 'update<%= @suffix %>', :id => @<%= singular_name %> %> + <%%= render_partial "form" %> + + +<%%= end_form_tag %> + +<%%= link_to 'Show', :action => 'show<%= suffix %>', :id => @<%= singular_name %> %> | <%%= link_to 'Back', :action => 'list<%= suffix %>' %> diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml b/railties/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml index e0d56d1122e7a625010cf02e10afed4c3f44e8ec..0ca1d1c97e03d8066a5501c2ac5a20db90bea9a4 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml @@ -2,19 +2,19 @@ -<%% for column in <%= class_name %>.content_columns %> +<%% for column in <%= model_name %>.content_columns %> <%% end %> <%% for <%= singular_name %> in @<%= plural_name %> %> - <%% for column in <%= class_name %>.content_columns %> + <%% for column in <%= model_name %>.content_columns %> <%% end %> - - - + + + <%% end %>
<%%= column.human_name %>
<%%=h <%= singular_name %>.send(column.name) %><%%= link_to 'Show', :action => 'show<%= suffix %>', :id => <%= singular_name %>.id %><%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => <%= singular_name %>.id %><%%= link_to 'Destroy', :action => 'destroy<%= suffix %>', :id => <%= singular_name %>.id %><%%= link_to 'Show', :action => 'show<%= suffix %>', :id => <%= singular_name %> %><%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => <%= singular_name %> %><%%= link_to 'Destroy', {:action => 'destroy<%= suffix %>', :id => <%= singular_name %>}, :confirm => "Are you sure?" %>
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml b/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml index 54b2e49312cfa1aec05423b1f4fae184771f6dc9..19cfa12ba24b1c0305995e193857d195e57e6374 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml @@ -1,6 +1,11 @@

New <%= singular_name %>

<%%= error_messages_for '<%= singular_name %>' %> -<%= template_for_inclusion %> + +<%%= start_form_tag :action => 'create<%= @suffix %>' %> + <%%= render_partial "form" %> + + +<%%= end_form_tag %> <%%= link_to 'Back', :action => 'list<%= suffix %>' %> diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml b/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml index ba8f3616ddb3d4356ead5f610daf8e1307b22952..69fb55b5e47441bca8024ab444bc4676b9e6b496 100644 --- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml +++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml @@ -1,8 +1,8 @@ -<%% for column in <%= class_name %>.content_columns %> +<%% for column in <%= model_name %>.content_columns %>

<%%= column.human_name %>: <%%= @<%= singular_name %>.send(column.name) %>

<%% end %> -<%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => @<%= singular_name %>.id %> | +<%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => @<%= singular_name %> %> | <%%= link_to 'Back', :action => 'list<%= suffix %>' %>