admin_assistant 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +16 -0
- data/Rakefile +34 -6
- data/VERSION +1 -0
- data/admin_assistant.gemspec +440 -0
- data/doc/img/blog_posts-index.png +0 -0
- data/install.rb +25 -4
- data/lib/admin_assistant/active_record_column.rb +133 -45
- data/lib/admin_assistant/association_target.rb +16 -3
- data/lib/admin_assistant/belongs_to_column.rb +18 -10
- data/lib/admin_assistant/builder.rb +67 -30
- data/lib/admin_assistant/column.rb +153 -71
- data/lib/admin_assistant/date_time_range_end_point_selector.rb +340 -0
- data/lib/admin_assistant/default_search_column.rb +3 -7
- data/lib/admin_assistant/form_view.rb +114 -10
- data/lib/admin_assistant/has_many_column.rb +56 -0
- data/lib/admin_assistant/index.rb +220 -83
- data/lib/admin_assistant/polymorphic_belongs_to_column.rb +1 -1
- data/lib/admin_assistant/request/base.rb +196 -67
- data/lib/admin_assistant/request/create.rb +55 -7
- data/lib/admin_assistant/request/edit.rb +1 -2
- data/lib/admin_assistant/request/index.rb +16 -9
- data/lib/admin_assistant/request/new.rb +19 -7
- data/lib/admin_assistant/request/update.rb +28 -13
- data/lib/admin_assistant/search.rb +17 -2
- data/lib/admin_assistant/virtual_column.rb +15 -7
- data/lib/admin_assistant.rb +101 -81
- data/lib/javascripts/admin_assistant.js +1 -1
- data/lib/stylesheets/activescaffold.css +6 -1
- data/lib/stylesheets/default.css +17 -0
- data/lib/views/form.html.erb +7 -3
- data/lib/views/index.html.erb +13 -8
- data/lib/views/multi_form.html.erb +71 -0
- data/lib/views/show.html.erb +4 -4
- data/test_rails_app/README +256 -0
- data/test_rails_app/Rakefile +13 -0
- data/test_rails_app/app/controllers/admin/appointments2_controller.rb +15 -0
- data/test_rails_app/app/controllers/admin/appointments_controller.rb +11 -0
- data/test_rails_app/app/controllers/admin/blog_posts2_controller.rb +138 -0
- data/test_rails_app/app/controllers/admin/blog_posts3_controller.rb +76 -0
- data/test_rails_app/app/controllers/admin/blog_posts4_controller.rb +21 -0
- data/test_rails_app/app/controllers/admin/blog_posts5_controller.rb +27 -0
- data/test_rails_app/app/controllers/admin/blog_posts6_controller.rb +10 -0
- data/test_rails_app/app/controllers/admin/blog_posts_controller.rb +8 -0
- data/test_rails_app/app/controllers/admin/blog_posts_custom_new_and_edit_controller.rb +15 -0
- data/test_rails_app/app/controllers/admin/blog_posts_read_only_controller.rb +19 -0
- data/test_rails_app/app/controllers/admin/bookmarks_controller.rb +11 -0
- data/test_rails_app/app/controllers/admin/comments2_controller.rb +14 -0
- data/test_rails_app/app/controllers/admin/comments_controller.rb +12 -0
- data/test_rails_app/app/controllers/admin/file_column_images2_controller.rb +10 -0
- data/test_rails_app/app/controllers/admin/file_column_images_controller.rb +6 -0
- data/test_rails_app/app/controllers/admin/images2_controller.rb +11 -0
- data/test_rails_app/app/controllers/admin/images_controller.rb +6 -0
- data/test_rails_app/app/controllers/admin/misconfigured1_controller.rb +7 -0
- data/test_rails_app/app/controllers/admin/not_migrated_yets_controller.rb +9 -0
- data/test_rails_app/app/controllers/admin/product_categories2_controller.rb +7 -0
- data/test_rails_app/app/controllers/admin/product_categories_controller.rb +5 -0
- data/test_rails_app/app/controllers/admin/products2_controller.rb +15 -0
- data/test_rails_app/app/controllers/admin/products_controller.rb +31 -0
- data/test_rails_app/app/controllers/admin/television_airings_controller.rb +5 -0
- data/test_rails_app/app/controllers/admin/television_time_slots_controller.rb +5 -0
- data/test_rails_app/app/controllers/admin/users2_controller.rb +10 -0
- data/test_rails_app/app/controllers/admin/users_controller.rb +63 -0
- data/test_rails_app/app/controllers/application.rb +16 -0
- data/test_rails_app/app/controllers/application_controller.rb +16 -0
- data/test_rails_app/app/controllers/blog_posts_controller.rb +5 -0
- data/test_rails_app/app/helpers/admin/appointments2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/appointments_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts2_helper.rb +27 -0
- data/test_rails_app/app/helpers/admin/blog_posts3_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts4_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts6_helper.rb +16 -0
- data/test_rails_app/app/helpers/admin/blog_posts_custom_new_and_edit_helper.rb +29 -0
- data/test_rails_app/app/helpers/admin/blog_posts_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts_read_only_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/bookmarks_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/comments2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/comments_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/file_column_images2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/file_column_images_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/images2_helper.rb +8 -0
- data/test_rails_app/app/helpers/admin/images_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/misconfigured1_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/not_migrated_yets_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/product_categories2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/product_categories_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/products2_helper.rb +3 -0
- data/test_rails_app/app/helpers/admin/products_helper.rb +6 -0
- data/test_rails_app/app/helpers/admin/television_airings_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/television_time_slots_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/users2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/users_helper.rb +25 -0
- data/test_rails_app/app/helpers/application_helper.rb +3 -0
- data/test_rails_app/app/helpers/blog_posts_helper.rb +2 -0
- data/test_rails_app/app/models/appointment.rb +5 -0
- data/test_rails_app/app/models/blog_post.rb +14 -0
- data/test_rails_app/app/models/blog_post_tag.rb +6 -0
- data/test_rails_app/app/models/bookmark.rb +6 -0
- data/test_rails_app/app/models/comment.rb +4 -0
- data/test_rails_app/app/models/file_column_image.rb +3 -0
- data/test_rails_app/app/models/image.rb +3 -0
- data/test_rails_app/app/models/not_migrated_yet.rb +2 -0
- data/test_rails_app/app/models/product.rb +7 -0
- data/test_rails_app/app/models/product_category.rb +9 -0
- data/test_rails_app/app/models/tag.rb +4 -0
- data/test_rails_app/app/models/television_airing.rb +3 -0
- data/test_rails_app/app/models/television_time_slot.rb +11 -0
- data/test_rails_app/app/models/user.rb +14 -0
- data/test_rails_app/app/views/admin/appointments/_subject_input.html.erb +2 -0
- data/test_rails_app/app/views/admin/appointments2/_time_input.html.erb +31 -0
- data/test_rails_app/app/views/admin/blog_posts2/_after_form.html.erb +5 -0
- data/test_rails_app/app/views/admin/blog_posts2/_after_index.html.erb +1 -0
- data/test_rails_app/app/views/admin/blog_posts2/_after_tags_input.html.erb +16 -0
- data/test_rails_app/app/views/admin/blog_posts2/_before_index.html.erb +2 -0
- data/test_rails_app/app/views/admin/blog_posts5/_after_index_header.html.erb +8 -0
- data/test_rails_app/app/views/admin/blog_posts_read_only/_body_for_show.html.erb +1 -0
- data/test_rails_app/app/views/admin/products/_name_input.html.erb +2 -0
- data/test_rails_app/app/views/admin/products/_percent_off_input.html.erb +2 -0
- data/test_rails_app/app/views/admin/products/_price_input.html.erb +10 -0
- data/test_rails_app/app/views/blog_posts/show.html.erb +13 -0
- data/test_rails_app/app/views/layouts/admin.html.erb +31 -0
- data/test_rails_app/config/boot.rb +109 -0
- data/test_rails_app/config/database.yml +28 -0
- data/test_rails_app/config/environment.rb +78 -0
- data/test_rails_app/config/environments/development.rb +17 -0
- data/test_rails_app/config/environments/production.rb +24 -0
- data/test_rails_app/config/environments/test.rb +24 -0
- data/test_rails_app/config/initializers/inflections.rb +10 -0
- data/test_rails_app/config/initializers/mime_types.rb +5 -0
- data/test_rails_app/config/initializers/new_rails_defaults.rb +17 -0
- data/test_rails_app/config/locales/en.yml +5 -0
- data/test_rails_app/config/routes.rb +43 -0
- data/test_rails_app/db/migrate/20090213215514_create_blog_posts.rb +12 -0
- data/test_rails_app/db/migrate/20090217225542_add_body_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090221220917_create_tags.rb +13 -0
- data/test_rails_app/db/migrate/20090221220947_create_blog_post_tags.rb +14 -0
- data/test_rails_app/db/migrate/20090222162204_add_textile_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090222163231_add_published_at_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090301191722_create_images.rb +16 -0
- data/test_rails_app/db/migrate/20090305165345_create_accounts.rb +14 -0
- data/test_rails_app/db/migrate/20090307225027_rename_accounts_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090307225750_add_user_id_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090309185114_change_blog_posts_textile.rb +9 -0
- data/test_rails_app/db/migrate/20090309193635_create_products.rb +14 -0
- data/test_rails_app/db/migrate/20090309203056_create_comments.rb +15 -0
- data/test_rails_app/db/migrate/20090323005947_create_file_column_images.rb +12 -0
- data/test_rails_app/db/migrate/20090326160049_add_birthday_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090326223606_add_state_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090503134004_add_file_column_image_to_products.rb +9 -0
- data/test_rails_app/db/migrate/20090617173651_create_bookmarks.rb +15 -0
- data/test_rails_app/db/migrate/20090624165355_add_tags_string_to_blog_post.rb +9 -0
- data/test_rails_app/db/migrate/20090625144313_add_avatar_fields_to_user.rb +11 -0
- data/test_rails_app/db/migrate/20090629202956_add_merged_into_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090701171857_add_force_textile_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090704163647_add_deleted_at_to_products.rb +9 -0
- data/test_rails_app/db/migrate/20090704173800_add_sale_fields_to_products.rb +13 -0
- data/test_rails_app/db/migrate/20090714024501_create_product_categories.rb +15 -0
- data/test_rails_app/db/migrate/20090819162835_add_admin_level_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20091115134559_add_first_and_last_names_to_users.rb +11 -0
- data/test_rails_app/db/migrate/20091221011256_add_position_to_product_categories.rb +9 -0
- data/test_rails_app/db/migrate/20091222160814_create_appointments.rb +14 -0
- data/test_rails_app/db/migrate/20091227224547_add_user_id_to_appointments.rb +9 -0
- data/test_rails_app/db/migrate/20100214213359_create_television_time_slots.rb +13 -0
- data/test_rails_app/db/migrate/20100214213451_create_television_airings.rb +15 -0
- data/test_rails_app/doc/README_FOR_APP +5 -0
- data/test_rails_app/lib/tasks/rspec.rake +163 -0
- data/test_rails_app/public/404.html +30 -0
- data/test_rails_app/public/422.html +30 -0
- data/test_rails_app/public/500.html +33 -0
- data/test_rails_app/public/dispatch.cgi +10 -0
- data/test_rails_app/public/dispatch.fcgi +24 -0
- data/test_rails_app/public/dispatch.rb +10 -0
- data/test_rails_app/public/favicon.ico +0 -0
- data/test_rails_app/public/images/rails.png +0 -0
- data/test_rails_app/public/index.html +274 -0
- data/test_rails_app/public/javascripts/application.js +2 -0
- data/test_rails_app/public/javascripts/controls.js +963 -0
- data/test_rails_app/public/javascripts/dragdrop.js +973 -0
- data/test_rails_app/public/javascripts/effects.js +1128 -0
- data/test_rails_app/public/javascripts/prototype.js +4320 -0
- data/test_rails_app/public/robots.txt +5 -0
- data/test_rails_app/public/stylesheets/admin.css +3 -0
- data/test_rails_app/public/stylesheets/scaffold.css +54 -0
- data/test_rails_app/script/about +4 -0
- data/test_rails_app/script/autospec +5 -0
- data/test_rails_app/script/console +3 -0
- data/test_rails_app/script/dbconsole +3 -0
- data/test_rails_app/script/destroy +3 -0
- data/test_rails_app/script/generate +3 -0
- data/test_rails_app/script/performance/benchmarker +3 -0
- data/test_rails_app/script/performance/profiler +3 -0
- data/test_rails_app/script/performance/request +3 -0
- data/test_rails_app/script/plugin +3 -0
- data/test_rails_app/script/populate_tables.rb +49 -0
- data/test_rails_app/script/process/inspector +3 -0
- data/test_rails_app/script/process/reaper +3 -0
- data/test_rails_app/script/process/spawner +3 -0
- data/test_rails_app/script/runner +3 -0
- data/test_rails_app/script/server +3 -0
- data/test_rails_app/script/spec +5 -0
- data/test_rails_app/script/spec_server +125 -0
- data/test_rails_app/spec/controllers/admin/appointments2_controller_spec.rb +88 -0
- data/test_rails_app/spec/controllers/admin/appointments_controller_spec.rb +419 -0
- data/test_rails_app/spec/controllers/admin/blog_posts2_controller_spec.rb +1021 -0
- data/test_rails_app/spec/controllers/admin/blog_posts3_controller_spec.rb +532 -0
- data/test_rails_app/spec/controllers/admin/blog_posts4_controller_spec.rb +231 -0
- data/test_rails_app/spec/controllers/admin/blog_posts5_controller_spec.rb +77 -0
- data/test_rails_app/spec/controllers/admin/blog_posts6_controller_spec.rb +49 -0
- data/test_rails_app/spec/controllers/admin/blog_posts_controller_spec.rb +987 -0
- data/test_rails_app/spec/controllers/admin/blog_posts_custom_new_and_edit_controller_spec.rb +99 -0
- data/test_rails_app/spec/controllers/admin/blog_posts_read_only_controller_spec.rb +94 -0
- data/test_rails_app/spec/controllers/admin/bookmarks_controller_spec.rb +505 -0
- data/test_rails_app/spec/controllers/admin/comments2_controller_spec.rb +70 -0
- data/test_rails_app/spec/controllers/admin/comments_controller_spec.rb +82 -0
- data/test_rails_app/spec/controllers/admin/file_column_images2_controller_spec.rb +25 -0
- data/test_rails_app/spec/controllers/admin/file_column_images_controller_spec.rb +82 -0
- data/test_rails_app/spec/controllers/admin/images2_controller_spec.rb +44 -0
- data/test_rails_app/spec/controllers/admin/images_controller_spec.rb +97 -0
- data/test_rails_app/spec/controllers/admin/misconfigured1_controller_spec.rb +21 -0
- data/test_rails_app/spec/controllers/admin/not_migrated_yets_controller_spec.rb +10 -0
- data/test_rails_app/spec/controllers/admin/product_categories2_controller_spec.rb +215 -0
- data/test_rails_app/spec/controllers/admin/product_categories_controller_spec.rb +19 -0
- data/test_rails_app/spec/controllers/admin/products2_controller_spec.rb +203 -0
- data/test_rails_app/spec/controllers/admin/products_controller_spec.rb +255 -0
- data/test_rails_app/spec/controllers/admin/television_airings_controller_spec.rb +32 -0
- data/test_rails_app/spec/controllers/admin/television_time_slots_controller_spec.rb +10 -0
- data/test_rails_app/spec/controllers/admin/users2_controller_spec.rb +65 -0
- data/test_rails_app/spec/controllers/admin/users_controller_spec.rb +344 -0
- data/test_rails_app/spec/controllers/blog_posts_controller_spec.rb +13 -0
- data/test_rails_app/spec/data/ruby_throated.jpg +0 -0
- data/test_rails_app/spec/data/tweenbot.jpg +0 -0
- data/test_rails_app/spec/fixtures/appointments.yml +9 -0
- data/test_rails_app/spec/fixtures/blog_post_tags.yml +9 -0
- data/test_rails_app/spec/fixtures/blog_posts.yml +7 -0
- data/test_rails_app/spec/fixtures/bookmarks.yml +11 -0
- data/test_rails_app/spec/fixtures/comments.yml +11 -0
- data/test_rails_app/spec/fixtures/file_column_images.yml +7 -0
- data/test_rails_app/spec/fixtures/images.yml +7 -0
- data/test_rails_app/spec/fixtures/not_migrated_yets.yml +7 -0
- data/test_rails_app/spec/fixtures/product_categories.yml +7 -0
- data/test_rails_app/spec/fixtures/products.yml +9 -0
- data/test_rails_app/spec/fixtures/tags.yml +7 -0
- data/test_rails_app/spec/fixtures/television_airings.yml +11 -0
- data/test_rails_app/spec/fixtures/television_time_slots.yml +7 -0
- data/test_rails_app/spec/fixtures/users.yml +9 -0
- data/test_rails_app/spec/helpers/admin/appointments2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/appointments_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts3_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts4_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts_custom_new_and_edit_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts_read_only_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/bookmarks_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/comments2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/comments_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/file_column_images2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/file_column_images_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/images2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/images_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/misconfigured1_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/not_migrated_yets_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/product_categories2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/product_categories_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/products2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/products_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/television_airings_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/television_time_slots_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/users2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/users_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/blog_posts_helper_spec.rb +11 -0
- data/test_rails_app/spec/models/appointment_spec.rb +16 -0
- data/test_rails_app/spec/models/blog_post_spec.rb +13 -0
- data/test_rails_app/spec/models/blog_post_tag_spec.rb +14 -0
- data/test_rails_app/spec/models/bookmark_spec.rb +15 -0
- data/test_rails_app/spec/models/comment_spec.rb +15 -0
- data/test_rails_app/spec/models/file_column_image_spec.rb +12 -0
- data/test_rails_app/spec/models/image_spec.rb +12 -0
- data/test_rails_app/spec/models/not_migrated_yet_spec.rb +15 -0
- data/test_rails_app/spec/models/product_category_spec.rb +15 -0
- data/test_rails_app/spec/models/product_spec.rb +14 -0
- data/test_rails_app/spec/models/tag_spec.rb +13 -0
- data/test_rails_app/spec/models/television_airing_spec.rb +15 -0
- data/test_rails_app/spec/models/television_time_slot_spec.rb +13 -0
- data/test_rails_app/spec/models/user_spec.rb +14 -0
- data/test_rails_app/spec/rcov.opts +2 -0
- data/test_rails_app/spec/spec.opts +4 -0
- data/test_rails_app/spec/spec_helper.rb +88 -0
- data/test_rails_app/spec/spec_or_test_helper.rb +49 -0
- data/test_rails_app/test/fixtures/file_column_images.yml +7 -0
- data/test_rails_app/test/integration/admin_blog_posts2_integration_test.rb +16 -0
- data/test_rails_app/test/integration/admin_blog_posts5_integration_test.rb +19 -0
- data/test_rails_app/test/integration/admin_blog_posts_integration_test.rb +25 -0
- data/test_rails_app/test/test_helper.rb +28 -0
- data/test_rails_app/vendor/plugins/file_column/CHANGELOG +69 -0
- data/test_rails_app/vendor/plugins/file_column/README +54 -0
- data/test_rails_app/vendor/plugins/file_column/Rakefile +36 -0
- data/test_rails_app/vendor/plugins/file_column/TODO +6 -0
- data/test_rails_app/vendor/plugins/file_column/init.rb +13 -0
- data/test_rails_app/vendor/plugins/file_column/lib/file_column.rb +723 -0
- data/test_rails_app/vendor/plugins/file_column/lib/file_column_helper.rb +150 -0
- data/test_rails_app/vendor/plugins/file_column/lib/file_compat.rb +28 -0
- data/test_rails_app/vendor/plugins/file_column/lib/magick_file_column.rb +260 -0
- data/test_rails_app/vendor/plugins/file_column/lib/rails_file_column.rb +19 -0
- data/test_rails_app/vendor/plugins/file_column/lib/test_case.rb +124 -0
- data/test_rails_app/vendor/plugins/file_column/lib/validations.rb +112 -0
- data/test_rails_app/vendor/plugins/file_column/test/abstract_unit.rb +63 -0
- data/test_rails_app/vendor/plugins/file_column/test/connection.rb +17 -0
- data/test_rails_app/vendor/plugins/file_column/test/file_column_helper_test.rb +97 -0
- data/test_rails_app/vendor/plugins/file_column/test/file_column_test.rb +650 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/entry.rb +32 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/invalid-image.jpg +1 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/kerb.jpg +0 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/mysql.sql +25 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/schema.rb +10 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/skanthak.png +0 -0
- data/test_rails_app/vendor/plugins/file_column/test/magick_test.rb +380 -0
- data/test_rails_app/vendor/plugins/file_column/test/magick_view_only_test.rb +21 -0
- data/vendor/ar_query/ar_query.gemspec +16 -0
- data/website/_layouts/api.html +39 -0
- data/website/_layouts/default.html +34 -0
- data/website/api/core.markdown +106 -0
- data/website/api/destroy.markdown +25 -0
- data/website/api/form.markdown +291 -0
- data/website/api/idx.markdown +286 -0
- data/website/api/index.markdown +147 -0
- data/website/api/search.markdown +108 -0
- data/website/api/show.markdown +22 -0
- data/website/community.markdown +27 -0
- data/website/css/lightbox.css +29 -0
- data/website/css/main.css +70 -0
- data/website/design_principles.markdown +50 -0
- data/website/getting_started.markdown +10 -0
- data/website/img/blog_posts-index.png +0 -0
- data/website/img/blog_posts-search.png +0 -0
- data/website/img/lightbox/bullet.gif +0 -0
- data/website/img/lightbox/close.gif +0 -0
- data/website/img/lightbox/closelabel.gif +0 -0
- data/website/img/lightbox/donate-button.gif +0 -0
- data/website/img/lightbox/download-icon.gif +0 -0
- data/website/img/lightbox/image-1.jpg +0 -0
- data/website/img/lightbox/loading.gif +0 -0
- data/website/img/lightbox/nextlabel.gif +0 -0
- data/website/img/lightbox/prevlabel.gif +0 -0
- data/website/img/lightbox/thumb-1.jpg +0 -0
- data/website/img/screen1-thumb.png +0 -0
- data/website/img/screen1.png +0 -0
- data/website/img/screen10-thumb.png +0 -0
- data/website/img/screen10.png +0 -0
- data/website/img/screen11-thumb.png +0 -0
- data/website/img/screen11.png +0 -0
- data/website/img/screen2-thumb.png +0 -0
- data/website/img/screen2.png +0 -0
- data/website/img/screen3-thumb.png +0 -0
- data/website/img/screen3.png +0 -0
- data/website/img/screen4-thumb.png +0 -0
- data/website/img/screen4.png +0 -0
- data/website/img/screen5-thumb.png +0 -0
- data/website/img/screen5.png +0 -0
- data/website/img/screen6-thumb.png +0 -0
- data/website/img/screen6.png +0 -0
- data/website/img/screen7-thumb.png +0 -0
- data/website/img/screen7.png +0 -0
- data/website/img/screen8-thumb.png +0 -0
- data/website/img/screen8.png +0 -0
- data/website/img/screen9-thumb.png +0 -0
- data/website/img/screen9.png +0 -0
- data/website/img/user-form.png +0 -0
- data/website/index.markdown +35 -0
- data/website/js/builder.js +136 -0
- data/website/js/effects.js +1122 -0
- data/website/js/lightbox.js +497 -0
- data/website/js/prototype.js +4221 -0
- data/website/js/scriptaculous.js +58 -0
- data/website/quick_start.markdown +44 -0
- data/website/screenshots.markdown +27 -0
- data/website/tutorial.markdown +56 -0
- metadata +391 -23
@@ -0,0 +1,291 @@
|
|
1
|
+
---
|
2
|
+
layout: api
|
3
|
+
title: Form
|
4
|
+
---
|
5
|
+
|
6
|
+
![form](../img/user-form.png)
|
7
|
+
|
8
|
+
Form configuration affects both creating new records and updating existing records. Most of its customization happens through the form builder object:
|
9
|
+
|
10
|
+
|
11
|
+
class Admin::BlogPostsController < ApplicationController
|
12
|
+
admin_assistant_for BlogPost do |a|
|
13
|
+
a.form do |form|
|
14
|
+
form.columns :user, :title, :body
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
### Form config options
|
20
|
+
|
21
|
+
#### columns
|
22
|
+
|
23
|
+
form.columns :user, :title, :body
|
24
|
+
|
25
|
+
Shows only these columns in the form.
|
26
|
+
|
27
|
+
#### columns\_for\_edit
|
28
|
+
|
29
|
+
form.columns_for_edit :title, :user, :published_at, :body, :merged_into
|
30
|
+
|
31
|
+
Shows only these columns in the edit action.
|
32
|
+
|
33
|
+
|
34
|
+
#### columns\_for\_new
|
35
|
+
|
36
|
+
form.columns_for_new :title, :user, :published_at
|
37
|
+
|
38
|
+
Shows only these columns in the new action.
|
39
|
+
|
40
|
+
|
41
|
+
#### multi
|
42
|
+
|
43
|
+
form.multi = true
|
44
|
+
|
45
|
+
Set this to true to enable multi-record creation in your form. Validation errors will be shown on top of the individual row that caused the error, and if any of the records has a validation error, none of the records will be created.
|
46
|
+
|
47
|
+
Please note that this feature is alpha and may change significantly in the near future. As always, input is appreciated.
|
48
|
+
|
49
|
+
|
50
|
+
#### submit\_buttons
|
51
|
+
|
52
|
+
form.submit_buttons << 'Preview'
|
53
|
+
|
54
|
+
|
55
|
+
By default, there is one button at the bottom of the form, saying either "Create" or "Update". By appending to this array you can specify other buttons, and then check if those buttons were clicked in `destination_after_save`, below.
|
56
|
+
|
57
|
+
### Column config options
|
58
|
+
|
59
|
+
#### datetime\_select\_options
|
60
|
+
|
61
|
+
form[:published_at].datetime_select_options =
|
62
|
+
{:include_blank => false, :start_year => 2009}
|
63
|
+
|
64
|
+
Passes through these options to the datetime select for this column. By default this is set to `{:include_blank => true}`.
|
65
|
+
|
66
|
+
#### default
|
67
|
+
|
68
|
+
form[:published_at].default do |controller|
|
69
|
+
controller.default_published_at
|
70
|
+
end
|
71
|
+
|
72
|
+
Sets a default value for the column when rendering the new form.
|
73
|
+
|
74
|
+
|
75
|
+
#### description
|
76
|
+
|
77
|
+
form[:publish].description = "Click this check box to publish this blog post."
|
78
|
+
|
79
|
+
Sets descriptive text that will appear next to the column's input.
|
80
|
+
|
81
|
+
#### image\_size
|
82
|
+
|
83
|
+
form[:image].image_size = '300x500'
|
84
|
+
|
85
|
+
By default, [Paperclip] and [FileColumn] image files are rendered at full-size in the form. To restrict their size, pass a size string to `image_size`.
|
86
|
+
|
87
|
+
#### input
|
88
|
+
|
89
|
+
form[:publish].input = :check_box
|
90
|
+
|
91
|
+
Currently supports `:check_box`, `:select`, `:text_area`, and `:us_state`. `:us_state` will render a drop-down with U.S. states.
|
92
|
+
|
93
|
+
#### nilify\_link
|
94
|
+
|
95
|
+
Date and datetime fields come with a javascript link the clears the value in the date or datetime selects. The text of this link is "Set \[column name\] to nil" by default, but you may want to customize this text:
|
96
|
+
|
97
|
+
form[:sale_starts_at].nilify_link = 'Not on sale'
|
98
|
+
|
99
|
+
|
100
|
+
#### read\_only
|
101
|
+
|
102
|
+
a.form[:comment].read_only
|
103
|
+
|
104
|
+
If this is set, the given column will only be displayed, and not editable.
|
105
|
+
|
106
|
+
|
107
|
+
#### select\_choices
|
108
|
+
|
109
|
+
form[:admin_level].select_choices = %w(normal admin superuser)
|
110
|
+
|
111
|
+
Uses this with select inputs to set or override what is passed to Rails' `select` method as its `choices` argument.
|
112
|
+
|
113
|
+
|
114
|
+
#### select\_options
|
115
|
+
|
116
|
+
form[:user].select_options = {:include_blank => false}
|
117
|
+
|
118
|
+
Use this with belongs-to associations to tell admin\_assistant how to configure the `select` dropdown for the associated field. By default, this is set to `{:include_blank => true}`.
|
119
|
+
|
120
|
+
#### text\_area\_options
|
121
|
+
|
122
|
+
form[:body].text_area_options = {:cols => 20, :rows => 40}
|
123
|
+
|
124
|
+
Sets options to pass through to the text area that will be rendered for this column.
|
125
|
+
|
126
|
+
#### write\_once
|
127
|
+
|
128
|
+
form[:body].write_once
|
129
|
+
|
130
|
+
If this is set, the given column will only be editable on the new page, not on the edit page.
|
131
|
+
|
132
|
+
|
133
|
+
### Controller methods
|
134
|
+
|
135
|
+
#### after\_save
|
136
|
+
|
137
|
+
Runs after the record is saved.
|
138
|
+
|
139
|
+
#### before\_create
|
140
|
+
|
141
|
+
Runs before the record is created.
|
142
|
+
|
143
|
+
#### before\_save
|
144
|
+
|
145
|
+
def before_save(blog_post)
|
146
|
+
if params[:blog_post][:publish] && blog_post.published_at.nil?
|
147
|
+
blog_post.published_at = Time.now.utc
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
Runs before the record is saved.
|
152
|
+
|
153
|
+
#### before\_update
|
154
|
+
|
155
|
+
Runs before the record is updated.
|
156
|
+
|
157
|
+
|
158
|
+
#### before\_validation
|
159
|
+
|
160
|
+
Runs before the record is validated.
|
161
|
+
|
162
|
+
|
163
|
+
#### \[column\]\_exists?
|
164
|
+
|
165
|
+
Used for image fields in generating form pages. If this method exists on the controller, it will be called to see if the image exists. You'll probably use this in conjunction with `[column]_url` and `destroy_[column]_in_attributes`.
|
166
|
+
|
167
|
+
def tmp_avatar_exists?(user)
|
168
|
+
user.has_avatar?
|
169
|
+
end
|
170
|
+
|
171
|
+
#### \[column\]\_url
|
172
|
+
|
173
|
+
Used for image fields in generating form pages. If the existing record has an image, and this method exists on the controller, it will be called to get the URL that should be rendered. You'll probably use this in conjunction with `[column]_exists?` and `destroy_[column]_in_attributes`.
|
174
|
+
|
175
|
+
def tmp_avatar_url(user)
|
176
|
+
"http://my-image-server.com/users/#{user.id}.jpg?v=#{user.avatar_version}"
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
#### \[column\]\_from\_form
|
182
|
+
|
183
|
+
def tags_from_form(tags_strings)
|
184
|
+
tags_strings.split(/\s+/).map { |tag_str|
|
185
|
+
Tag.find_by_tag(tag_str) || Tag.create(:tag => tag_str)
|
186
|
+
}
|
187
|
+
end
|
188
|
+
|
189
|
+
Should return a value suitable for assignment. In the above example, a BlogPost has-many tags, and the method tags\_from\_form will turn the string `"funny, video, lolcat"` into an array of three Tag model records, so admin\_assistant can set BlogPost#tags to that array.
|
190
|
+
|
191
|
+
If you need to return a value from another parameter, you can accept a second argument, which will be the params hash for the record.
|
192
|
+
|
193
|
+
def title_from_form(title_str, record_params)
|
194
|
+
if title_str.blank?
|
195
|
+
record_params[:title_alt]
|
196
|
+
else
|
197
|
+
title_str
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
If the value being returned is meant to be assigned through an association, you may find it useful to return custom errors to work around the strangeness of ActiveRecord's association-assignment error-handling. So admin\_assistant lets you optionally take a 3rd errors argument, which you can use to attach errors to the core model. This error object isn't returned, but changes to it will persist outside the body of the method.
|
202
|
+
|
203
|
+
def tags_from_form(tags_string, record_params, errors)
|
204
|
+
tags = tags_string.split(/\s+/).map { |tag_str|
|
205
|
+
Tag.find_by_tag(tag_str) || Tag.create(:tag => tag_str)
|
206
|
+
}
|
207
|
+
if tags.any? { |t| !t.valid? }
|
208
|
+
errors.add(:tags, "One or more tags was invalid")
|
209
|
+
end
|
210
|
+
tags
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
#### destination\_after\_save
|
217
|
+
|
218
|
+
def destination_after_save(blog_post, params)
|
219
|
+
if params[:commit] == 'Preview'
|
220
|
+
{:action => 'edit', :id => blog_post.id, :preview => '1'}
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
This method should return a hash to redirect to after a successful save. If it returns nil, the default is to return to the index page.
|
225
|
+
|
226
|
+
#### destroy\_\[column\]\_in\_attributes
|
227
|
+
|
228
|
+
Used for image fields. If a file field already exists, and the user clicks on the checkbox to delete this file, this method will be called if it's defined. You'll probably use this in conjunction with `[column]_exists?` and `[column]_exists?`.
|
229
|
+
|
230
|
+
def destroy_tmp_avatar_in_attributes(attributes)
|
231
|
+
attributes[:has_avatar] = false
|
232
|
+
end
|
233
|
+
|
234
|
+
|
235
|
+
#### validate
|
236
|
+
|
237
|
+
Runs after the model's built-in validation, before admin\_assistant tries to save the model.
|
238
|
+
|
239
|
+
|
240
|
+
### Helper methods
|
241
|
+
|
242
|
+
#### after\_\[column\]\_input
|
243
|
+
|
244
|
+
If this helper method is present, whatever text it returns will be rendered after the default input for the column in the form. Takes the record as its only argument. You can also create a partial named `_after_[column]_input.html.erb`.
|
245
|
+
|
246
|
+
def after_password_input(user)
|
247
|
+
if user.id
|
248
|
+
"Reset #{check_box_tag('reset_password')}"
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
#### \[column\]\_input
|
253
|
+
|
254
|
+
If this helper method is present, whatever text it returns will be rendered instead of the default input for the column in the form. If it returns nil, the default input will be rendered instead. Takes the record as its only argument.
|
255
|
+
|
256
|
+
def password_input(user)
|
257
|
+
if !user.id
|
258
|
+
"(autogenerated)"
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
You can also create a partial named `_[column]_input.html.erb`.
|
263
|
+
|
264
|
+
#### \[column\]\_string
|
265
|
+
|
266
|
+
If this helper method is present, its returned string will be rendered within a text field. Odds are you'll use this with the controller method `[column]_from_form`, above.
|
267
|
+
|
268
|
+
def tags_string(blog_post)
|
269
|
+
blog_post.tags.map { |tag| tag.tag }.join ' '
|
270
|
+
end
|
271
|
+
|
272
|
+
|
273
|
+
### Partials
|
274
|
+
|
275
|
+
#### \_\[column\]\_input.html.erb
|
276
|
+
|
277
|
+
If this partial is present, it will be rendered instead of the default input for the column.
|
278
|
+
|
279
|
+
#### \_after\_\[column\]\_input.html.erb
|
280
|
+
|
281
|
+
|
282
|
+
If this partial is present, it will be rendered after the default input for the column. You can also use the helper method `after_[column]_input`.
|
283
|
+
|
284
|
+
#### \_after\_form.html.erb
|
285
|
+
|
286
|
+
If this partial is present in the controller's views directory, it will be rendered after the normal form.
|
287
|
+
|
288
|
+
|
289
|
+
[FileColumn]: http://www.kanthak.net/opensource/file_column/
|
290
|
+
[Paperclip]: http://thoughtbot.com/projects/paperclip
|
291
|
+
|
@@ -0,0 +1,286 @@
|
|
1
|
+
---
|
2
|
+
layout: api
|
3
|
+
title: Index
|
4
|
+
---
|
5
|
+
|
6
|
+
![index](../img/blog_posts-index.png)
|
7
|
+
|
8
|
+
The index is the action that lets you view all records, with pagination and sorting. To customize it by getting the index builder inside of your admin\_assistant config:
|
9
|
+
|
10
|
+
class Admin::BlogPostsController < ApplicationController
|
11
|
+
admin_assistant_for BlogPost do |a|
|
12
|
+
a.index do |index|
|
13
|
+
index.columns :user, :title
|
14
|
+
index.sort_by 'published_at desc'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
### Index config options
|
20
|
+
|
21
|
+
#### actions
|
22
|
+
|
23
|
+
index.actions['All'] = {:all => '1'}
|
24
|
+
|
25
|
+
Adds more links to the upper-right hand-corner. By default there are two links there: "Search", and "New \[model name\]". If you have any other specific links to add, you can add them with index.actions, and they will be added to the right of those default two links.
|
26
|
+
|
27
|
+
#### cache\_total\_entries
|
28
|
+
|
29
|
+
index.cache_total_entries 12.hours
|
30
|
+
|
31
|
+
This is an optimization for large tables. Some databases are slow when trying to simply get the number of records in the table; but this number is required for any paginated view. If your index views are slow because of this, you should consider setting `cache_total_entries` to some amount of time. This will cache the count SQL request, so that the count will be slightly off for some period of time, but that probably doesn't matter if you have, for example, 150,000 users.
|
32
|
+
|
33
|
+
|
34
|
+
#### conditions
|
35
|
+
|
36
|
+
Specifies additional SQL that can restrict the records shown in the index view. This can be a simple string:
|
37
|
+
|
38
|
+
index.conditions "deleted_at is null"
|
39
|
+
|
40
|
+
It can also be a block that will be passed the params hash:
|
41
|
+
|
42
|
+
index.conditions do |params|
|
43
|
+
"deleted_at is null" unless params[:all]
|
44
|
+
end
|
45
|
+
|
46
|
+
This can also be accomplished with a protected controller method `conditions_for_index`; see below.
|
47
|
+
|
48
|
+
#### per\_page
|
49
|
+
|
50
|
+
index.per_page 100
|
51
|
+
|
52
|
+
By default, 25 rows per page will be shown. Set per\_page to set it to another number.
|
53
|
+
|
54
|
+
#### columns
|
55
|
+
|
56
|
+
index.columns :user, :title
|
57
|
+
|
58
|
+
If called, restricts which columns are shown. By default admin\_assistant will try to show all columns on the DB table, which will probably be too much if your table has a lot of columns.
|
59
|
+
|
60
|
+
Can also be used to add model methods that aren't database fields.
|
61
|
+
|
62
|
+
#### header
|
63
|
+
|
64
|
+
index.header do |params|
|
65
|
+
if params[:all]
|
66
|
+
"Blog posts (all)"
|
67
|
+
else
|
68
|
+
"Blog posts (unpublished)"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
For customization the text at the top of the page; takes a block with params as its argument
|
73
|
+
|
74
|
+
#### include
|
75
|
+
|
76
|
+
index.include :users
|
77
|
+
|
78
|
+
Accepts one or more association names to be eagerly loaded by ActiveRecord.
|
79
|
+
|
80
|
+
<a name="builder_right_column_links"></a>
|
81
|
+
#### right\_column\_links
|
82
|
+
|
83
|
+
By default, there are two links on the right-hand side of the row for each model: "Edit" and "Show". You can add new ones by appending to `right_column_links`:
|
84
|
+
|
85
|
+
index.right_column_links << lambda { |blog_post|
|
86
|
+
[
|
87
|
+
"New comment for this blog post",
|
88
|
+
{:controller => '/admin/comments', :action => 'new',
|
89
|
+
:comment => {:blog_post_id => blog_post.id }}
|
90
|
+
]
|
91
|
+
}
|
92
|
+
|
93
|
+
The lambda should receive the model and return a two-element array: The first element should be the text of the link and the second should be the URL parameters for that link.
|
94
|
+
|
95
|
+
See also the helper method [extra\_right\_column\_links\_for\_index](#helper_extra_right_column_links_for_index).
|
96
|
+
|
97
|
+
#### search
|
98
|
+
|
99
|
+
index.search :id, :title
|
100
|
+
|
101
|
+
Shortcut to Search [`columns`](/api/search.html#builder_columns) .
|
102
|
+
|
103
|
+
#### sort\_by
|
104
|
+
|
105
|
+
Sets the default sorting of records, which will be used unless the user has specified sorting by clicking any of the sort headers. This can be a SQL string:
|
106
|
+
|
107
|
+
index.sort_by 'published_at desc, id asc'
|
108
|
+
|
109
|
+
It can also just be a belongs-to association:
|
110
|
+
|
111
|
+
index.sort_by :user
|
112
|
+
|
113
|
+
In the case of a belongs-to association, by default it will search for fields called `name`, `title`, `login`, or `username` on the associated model and use that.
|
114
|
+
|
115
|
+
#### total\_entries
|
116
|
+
|
117
|
+
index.total_entries = do
|
118
|
+
BlogPost.cached_count
|
119
|
+
end
|
120
|
+
|
121
|
+
This block will be called during pagination to provide the total number of records. This can come in handy if you have a huge number of records and are finding the count(\*) SQL statement too expensive.
|
122
|
+
|
123
|
+
### Column config options
|
124
|
+
|
125
|
+
There are also configurations that can be applied to specific columns in the index view.
|
126
|
+
|
127
|
+
#### ajax\_toggle
|
128
|
+
|
129
|
+
index[:textile].ajax_toggle = false
|
130
|
+
|
131
|
+
By default, all boolean fields displayed in the index can be toggled with an Ajax link. Set `ajax_toggle` to false to disable this behavior.
|
132
|
+
|
133
|
+
#### image\_size
|
134
|
+
|
135
|
+
index[:image].image_size = '300x500'
|
136
|
+
|
137
|
+
By default, [Paperclip] and [FileColumn] image files are rendered at full-size in the index. To restrict their size, pass a size string to `image_size`.
|
138
|
+
|
139
|
+
|
140
|
+
#### link\_to\_args
|
141
|
+
|
142
|
+
class Admin::BlogPostsController < ApplicationController
|
143
|
+
layout 'admin'
|
144
|
+
|
145
|
+
admin_assistant_for BlogPost do |aa|
|
146
|
+
aa.index[:user].link_to_args do |blog_post|
|
147
|
+
{:controller => 'admin/users', :action => 'edit',
|
148
|
+
:id => blog_post.user_id }
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
If you'd like this column to link somewhere from the index view, set this with a block that returns a hash for `url_for` when called.
|
155
|
+
|
156
|
+
Note that this block takes the base record as its argument, not the value of the specific column or association. In the example above, the base model is BlogPost, so the block is receiving a blog post, not the associated user.
|
157
|
+
|
158
|
+
### Controller methods
|
159
|
+
|
160
|
+
#### before\_render\_for\_index
|
161
|
+
|
162
|
+
If defined on your controller, this hook is executed just before render takes place for the index action.
|
163
|
+
|
164
|
+
class Admin::BlogPostsController < ApplicationController
|
165
|
+
layout 'admin'
|
166
|
+
|
167
|
+
admin_assistant_for BlogPost
|
168
|
+
|
169
|
+
protected
|
170
|
+
|
171
|
+
# Blog post authors should not be visible if they have requested anonymity
|
172
|
+
def before_render_for_index
|
173
|
+
@index.records.each do |record|
|
174
|
+
record.author = nil if record.author.requested_anonymity?
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
#### conditions\_for\_index
|
180
|
+
|
181
|
+
def conditions_for_index
|
182
|
+
"deleted_at is null" unless params[:all]
|
183
|
+
end
|
184
|
+
|
185
|
+
Specifies additional SQL that can restrict the records shown in the index view.
|
186
|
+
|
187
|
+
Can also be set via `index.conditions`; see `conditions` above.
|
188
|
+
|
189
|
+
### Helper methods
|
190
|
+
|
191
|
+
#### \[column\]\_html\_for\_index
|
192
|
+
|
193
|
+
def title_html_for_index(blog_post)
|
194
|
+
"TITLE #{blog_post.title.capitalize}"
|
195
|
+
end
|
196
|
+
|
197
|
+
If this method exists on the helper, it will be used to render the HTML shown in each row for the column in question. It takes the model as its only argument.
|
198
|
+
|
199
|
+
<a name="helper_extra_right_column_links_for_index"></a>
|
200
|
+
#### extra\_right\_column\_links\_for\_index
|
201
|
+
|
202
|
+
By default, there are two links on the right-hand side of the row for each model: "Edit" and "Show". You can add new ones by returning them from `extra_right_column_links_for_index`:
|
203
|
+
|
204
|
+
def extra_right_column_links_for_index(blog_post)
|
205
|
+
link_to(
|
206
|
+
'New comment',
|
207
|
+
{
|
208
|
+
:controller => 'admin/comments', :action => 'new',
|
209
|
+
:comment => {:blog_post_id => blog_post.id}
|
210
|
+
}
|
211
|
+
)
|
212
|
+
end
|
213
|
+
|
214
|
+
Also see the builder method [right\_column\_links](#builder_right_column_links).
|
215
|
+
|
216
|
+
#### link\_to\_new\_in\_index?
|
217
|
+
|
218
|
+
The link to create a new record will be shown on the index view if there is a 'new' action for the controller (whether via admin\_assistant or otherwise). If you don't want the link generated, define a helper method like this:
|
219
|
+
|
220
|
+
def link_to_new_in_index?
|
221
|
+
false
|
222
|
+
end
|
223
|
+
|
224
|
+
#### link\_to\_search\_in\_index?
|
225
|
+
|
226
|
+
The link to the search form will be shown unless it is prevented using a define a helper method like this:
|
227
|
+
|
228
|
+
def link_to_search_in_index?
|
229
|
+
false
|
230
|
+
end
|
231
|
+
|
232
|
+
#### link\_to\_edit\_in\_index?
|
233
|
+
|
234
|
+
The edit link in the right column of each row will be shown if there is a 'edit' action for the controller (whether via admin\_assistant or otherwise). If you don't want the link generated, define a helper method like this:
|
235
|
+
|
236
|
+
def link_to_edit_in_index?(blog_post)
|
237
|
+
false
|
238
|
+
end
|
239
|
+
|
240
|
+
#### link\_to\_delete\_in\_index?
|
241
|
+
|
242
|
+
The delete link in the right column of each row will be shown if there is a 'destroy' action for the controller (whether via admin\_assistant or otherwise). If you don't want the link generated, define a helper method like this:
|
243
|
+
|
244
|
+
def link_to_delete_in_index?(blog_post)
|
245
|
+
false
|
246
|
+
end
|
247
|
+
|
248
|
+
#### link\_to\_show\_in\_index?
|
249
|
+
|
250
|
+
The show link in the right column of each row will be shown if there is a 'show' action for the controller (whether via admin\_assistant or otherwise). If you don't want the link generated, define a helper method like this:
|
251
|
+
|
252
|
+
def link_to_show_in_index?(blog_post)
|
253
|
+
false
|
254
|
+
end
|
255
|
+
|
256
|
+
#### \[column\]\_css\_class\_for\_index\_td
|
257
|
+
|
258
|
+
To add a css class to a table cell, define a helper method based on the name of the column:
|
259
|
+
|
260
|
+
def user_css_class_for_index_td(blog_post)
|
261
|
+
'custom_td_css_class'
|
262
|
+
end
|
263
|
+
|
264
|
+
#### css\_class\_for\_index\_tr
|
265
|
+
|
266
|
+
To add a css class to a table row, define a helper method like so:
|
267
|
+
|
268
|
+
def css_class_for_index_tr(blog_post)
|
269
|
+
'custom_tr_css_class'
|
270
|
+
end
|
271
|
+
|
272
|
+
### Partials
|
273
|
+
|
274
|
+
#### \_after\_index.html.erb
|
275
|
+
|
276
|
+
If this partial is present, it will be rendered after the entire index HTML.
|
277
|
+
|
278
|
+
#### \_before\_index.html.erb
|
279
|
+
|
280
|
+
If this partial is present, it will be rendered before the entire index HTML.
|
281
|
+
|
282
|
+
|
283
|
+
|
284
|
+
[FileColumn]: http://www.kanthak.net/opensource/file_column/
|
285
|
+
[Paperclip]: http://thoughtbot.com/projects/paperclip
|
286
|
+
|