I have a scaffold with a relation column (e.g., Account), using
naaano/active_scaffold_export. If I sort the list against the relation
column and try to export the list, and the relation is not included in
the set of export columns, I get the following error.
ActionView::Template::Error (SQLite3::SQLException: no such column:
accounts.login: SELECT DISTINCT "login_session_logs".* FROM
"login_session_logs" WHERE ("login_session_logs"."login_at" BETWEEN
'2013-05-23 19:11:14' AND '2014-05-23 19:11:14') ORDER BY
accounts.login ASC LIMIT 3000 OFFSET 0):
In this example, I am exporting the login_session_logs scaffold,
sorted against the account relation, but account column is not one of
the checked columns to include in the export. If I check/include the
account column in the export list the problem goes away.
I was able to change active_scaffold_export to force include the
sorting column(s) in the export list, which fixes the exception,
however this includes an undesired column in the export. I am mostly
OK with this because its a pretty rare condition, but there is
probably a better way?
Here is the diff for that change:
diff --git a/lib/active_scaffold/actions/export.rb
b/lib/active_scaffold/actions/export.rb
index cc91d28..171ad06 100755
--- a/lib/active_scaffold/actions/export.rb
+++ b/lib/active_scaffold/actions/export.rb
@@ -40,7 +40,8 @@ module ActiveScaffold::Actions
params.merge!(options)
end
- @export_columns = export_config.columns.reject { |col|
params[:export_columns][col.name.to_sym].nil? }
+ sorting = active_scaffold_config.list.user.sorting ||
active_scaffold_config.list.sorting
+ @export_columns = export_config.columns.reject { |col| !
sorting.sorts_on?(col) &&
params[:export_columns][col.name.to_sym].nil? }
includes_for_export_columns = @export_columns.collect{ |col|
col.includes }.flatten.uniq.compact
self.active_scaffold_includes.concat includes_for_export_columns
@export_config = export_config
I'm wondering if Sergio or Hernán or anyone else may know of a quick
code change to force the sort column into the generated SQL query
without actually including it in the list of export columns?
Heres the full log:
[127.0.0.1] Started POST "/admin/scaffolds/login_session_logs/export"
for 127.0.0.1 at 2014-05-23 12:11:13 -0700
[127.0.0.1] Cloak Load (0.2ms) SELECT "cloaks".* FROM "cloaks" LIMIT 1
[127.0.0.1] CACHE (0.0ms) SELECT "cloaks".* FROM "cloaks" LIMIT 1
[127.0.0.1] Processing by
Admin::Scaffolds::LoginSessionLogsController#export as CSV
[127.0.0.1] Parameters: {"utf8"=>"✓",
"authenticity_token"=>"JM7HLzFKHHv7V3Tg7aIIekz8T9ehUekgzyNl9JkJsLg=",
"export_columns"=>{"online"=>"1"}, "delimiter"=>",",
"full_download"=>"true", "commit"=>"Export"}
[127.0.0.1] AdminControllerAcl Load (0.2ms) SELECT
"admin_controller_acls".* FROM "admin_controller_acls" WHERE (active =
't') LIMIT 1
[127.0.0.1] Admin Load (0.2ms) SELECT "admins".* FROM "admins"
WHERE "admins"."id" = 1 LIMIT 1
[127.0.0.1] AdminRole Load (0.4ms) SELECT "admin_roles".* FROM
"admin_roles" WHERE "admin_roles"."id" = 1 LIMIT 1
[127.0.0.1] Completed 200 OK in 262.6ms (ActiveRecord: 3.3ms)
[127.0.0.1] (0.2ms) SELECT COUNT(DISTINCT
"login_session_logs"."id") FROM "login_session_logs" WHERE
("login_session_logs"."login_at" BETWEEN '2013-05-23 19:11:14' AND
'2014-05-23 19:11:14')
[127.0.0.1] LoginSessionLog Load (0.4ms) SELECT DISTINCT
"login_session_logs".* FROM "login_session_logs" WHERE
("login_session_logs"."login_at" BETWEEN '2013-05-23 19:11:14' AND
'2014-05-23 19:11:14') ORDER BY accounts.login ASC LIMIT 3000 OFFSET 0
[127.0.0.1] SQLite3::SQLException: no such column: accounts.login:
SELECT DISTINCT "login_session_logs".* FROM "login_session_logs"
WHERE ("login_session_logs"."login_at" BETWEEN '2013-05-23 19:11:14'
AND '2014-05-23 19:11:14') ORDER BY accounts.login ASC LIMIT 3000
OFFSET 0
[127.0.0.1] Rendered
vendor/cache/active_scaffold_export-cda10d477673/app/views/active_scaffold_overrides/_export.csv.erb
(190.6ms)
[127.0.0.1]
ActionView::Template::Error (SQLite3::SQLException: no such column:
accounts.login: SELECT DISTINCT "login_session_logs".* FROM
"login_session_logs" WHERE ("login_session_logs"."login_at" BETWEEN
'2013-05-23 19:11:14' AND '2014-05-23 19:11:14') ORDER BY
accounts.login ASC LIMIT 3000 OFFSET 0):
11: csv_lib = Object.const_defined?('CSV') ? CSV : FasterCSV
12: data = csv_lib.generate(fcsv_options) do |csv|
13: csv << fcsv_options[:headers] unless params[:skip_header] == 'true'
14: @records.each do |record|
15: csv << @export_columns.collect { |column|
16: get_export_column_value(record, column)
17: }
sqlite3 (1.3.8) lib/sqlite3/database.rb:91:in `initialize'
sqlite3 (1.3.8) lib/sqlite3/database.rb:91:in `new'
sqlite3 (1.3.8) lib/sqlite3/database.rb:91:in `prepare'
activerecord (3.2.16)
lib/active_record/connection_adapters/sqlite_adapter.rb:246:in `block
in exec_query'
activerecord (3.2.16)
lib/active_record/connection_adapters/abstract_adapter.rb:280:in
`block in log'
activesupport (3.2.16)
lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activerecord (3.2.16)
lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
activerecord (3.2.16)
lib/active_record/connection_adapters/sqlite_adapter.rb:242:in
`exec_query'
activerecord (3.2.16)
lib/active_record/connection_adapters/sqlite_adapter.rb:467:in
`select'
activerecord (3.2.16)
lib/active_record/connection_adapters/abstract/database_statements.rb:18:in
`select_all'
activerecord (3.2.16)
lib/active_record/connection_adapters/abstract/query_cache.rb:61:in
`block in select_all'
activerecord (3.2.16)
lib/active_record/connection_adapters/abstract/query_cache.rb:75:in
`cache_sql'
activerecord (3.2.16)
lib/active_record/connection_adapters/abstract/query_cache.rb:61:in
`select_all'
activerecord (3.2.16) lib/active_record/querying.rb:38:in `block in
find_by_sql'
activerecord (3.2.16) lib/active_record/explain.rb:41:in `logging_query_plan'
activerecord (3.2.16) lib/active_record/querying.rb:37:in `find_by_sql'
activerecord (3.2.16) lib/active_record/relation.rb:171:in `exec_queries'
activerecord (3.2.16) lib/active_record/relation.rb:160:in `block in to_a'
activerecord (3.2.16) lib/active_record/explain.rb:34:in `logging_query_plan'
activerecord (3.2.16) lib/active_record/relation.rb:159:in `to_a'
activerecord (3.2.16) lib/active_record/relation/delegation.rb:6:in `each'
vendor/cache/active_scaffold_export-cda10d477673/app/views/active_scaffold_overrides/_export.csv.erb:14:in
`block in
_vendor_cache_active_scaffold_export_cda__d_______app_views_active_scaffold_overrides__export_csv_erb__2160590640139068570_70265977404440'
/Users/nick/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/csv.rb:1155:in
`generate'
vendor/cache/active_scaffold_export-cda10d477673/app/views/active_scaffold_overrides/_export.csv.erb:12:in
`_vendor_cache_active_scaffold_export_cda__d_______app_views_active_scaffold_overrides__export_csv_erb__2160590640139068570_70265977404440'
actionpack (3.2.16) lib/action_view/template.rb:145:in `block in render'
activesupport (3.2.16) lib/active_support/notifications.rb:125:in `instrument'
actionpack (3.2.16) lib/action_view/template.rb:143:in `render'
actionpack (3.2.16)
lib/action_view/renderer/partial_renderer.rb:265:in `render_partial'
actionpack (3.2.16)
lib/action_view/renderer/partial_renderer.rb:238:in `block in render'
actionpack (3.2.16)
lib/action_view/renderer/abstract_renderer.rb:38:in `block in
instrument'
activesupport (3.2.16) lib/active_support/notifications.rb:123:in
`block in instrument'
activesupport (3.2.16)
lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.16) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.16)
lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
actionpack (3.2.16)
lib/action_view/renderer/partial_renderer.rb:237:in `render'
actionpack (3.2.16) lib/action_view/renderer/renderer.rb:41:in
`render_partial'
actionpack (3.2.16) lib/action_view/renderer/renderer.rb:15:in `render'
actionpack (3.2.16) lib/abstract_controller/rendering.rb:110:in
`_render_template'
actionpack (3.2.16) lib/action_controller/metal/streaming.rb:225:in
`_render_template'
actionpack (3.2.16) lib/abstract_controller/rendering.rb:103:in
`render_to_body'
actionpack (3.2.16) lib/action_controller/metal/renderers.rb:28:in
`render_to_body'
actionpack (3.2.16)
lib/action_controller/metal/compatibility.rb:50:in `render_to_body'
actionpack (3.2.16) lib/abstract_controller/rendering.rb:96:in
`render_to_string'
actionpack (3.2.16) lib/action_controller/metal/rendering.rb:23:in
`render_to_string'
vendor/cache/active_scaffold_export-cda10d477673/lib/active_scaffold/actions/export.rb:72:in
`block (4 levels) in export'
vendor/cache/active_scaffold_export-cda10d477673/lib/active_scaffold/actions/export.rb:118:in
`block in find_items_for_export'
vendor/cache/active_scaffold-c801174b6524/lib/active_scaffold/paginator.rb:48:in
`block in each'
vendor/cache/active_scaffold-c801174b6524/lib/active_scaffold/paginator.rb:55:in
`block in each_with_index'
vendor/cache/active_scaffold-c801174b6524/lib/active_scaffold/paginator.rb:54:in
`upto'
vendor/cache/active_scaffold-c801174b6524/lib/active_scaffold/paginator.rb:54:in
`each_with_index'
vendor/cache/active_scaffold-c801174b6524/lib/active_scaffold/paginator.rb:47:in
`each'
vendor/cache/active_scaffold_export-cda10d477673/lib/active_scaffold/actions/export.rb:117:in
`find_items_for_export'
vendor/cache/active_scaffold_export-cda10d477673/lib/active_scaffold/actions/export.rb:70:in
`block (3 levels) in export'
actionpack (3.2.16) lib/action_dispatch/http/response.rb:44:in `each'
actionpack (3.2.16) lib/action_dispatch/http/response.rb:44:in `each'
actionpack (3.2.16) lib/action_dispatch/http/response.rb:44:in `each'
rack (1.4.5) lib/rack/etag.rb:58:in `digest_body'
rack (1.4.5) lib/rack/etag.rb:26:in `call'
rack (1.4.5) lib/rack/conditionalget.rb:35:in `call'
actionpack (3.2.16) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.16)
lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.16) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
actionpack (3.2.16) lib/action_dispatch/middleware/cookies.rb:341:in `call'
activerecord (3.2.16) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.16)
lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in
`call'
actionpack (3.2.16)
lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.16) lib/active_support/callbacks.rb:405:in
`_run__1821919212090166409__call__4600822502316633814__callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.16) lib/active_support/callbacks.rb:385:in
`_run_call_callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.16) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
rails-dev-tweaks (0.6.1)
lib/rails_dev_tweaks/granular_autoload/middleware.rb:34:in `call'
actionpack (3.2.16) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.16)
lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.16)
lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.16) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.16) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.16) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.16) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.16) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.16)
lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.5) lib/rack/lock.rb:15:in `call'
actionpack (3.2.16) lib/action_dispatch/middleware/static.rb:63:in `call'
railties (3.2.16) lib/rails/engine.rb:484:in `call'
railties (3.2.16) lib/rails/application.rb:231:in `call'
rack (1.4.5) lib/rack/content_length.rb:14:in `call'
railties (3.2.16) lib/rails/rack/log_tailer.rb:17:in `call'
thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process'
thin (1.5.1) lib/thin/connection.rb:79:in `catch'
thin (1.5.1) lib/thin/connection.rb:79:in `pre_process'
thin (1.5.1) lib/thin/connection.rb:54:in `process'
thin (1.5.1) lib/thin/connection.rb:39:in `receive_data'
eventmachine (1.0.3) lib/eventmachine.rb:187:in `run_machine'
eventmachine (1.0.3) lib/eventmachine.rb:187:in `run'
thin (1.5.1) lib/thin/backends/base.rb:63:in `start'
thin (1.5.1) lib/thin/server.rb:159:in `start'
rack (1.4.5) lib/rack/handler/thin.rb:13:in `run'
rack (1.4.5) lib/rack/server.rb:268:in `start'
railties (3.2.16) lib/rails/commands/server.rb:70:in `start'
railties (3.2.16) lib/rails/commands.rb:55:in `block in <top (required)>'
railties (3.2.16) lib/rails/commands.rb:50:in `tap'
railties (3.2.16) lib/rails/commands.rb:50:in `<top (required)>'
script/rails:6:in `require'
script/rails:6:in `<main>'
Thanks!
-Nick
--
You received this message because you are subscribed to the Google Groups
"ActiveScaffold : Ruby on Rails Gem" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/activescaffold.
For more options, visit https://groups.google.com/d/optout.