javascript ruby-on-rails ruby erb

javascript - El archivo js.erb de Rails no puede encontrar el método "render"



ruby-on-rails ruby (3)

Tengo el siguiente código en un archivo ERB de Javascript:

$(document).ready(function() { $("#workout-week").append( <%= escape_javascript(render :partial => "show_training_period", :locals => { :period => @period }) %> ); });

Cuando llegué a la vista, obtengo el siguiente error:

undefined method `render'' for #<#<Class:0x00000004e21158>:0x00000005dbfe98>

El parcial existe, y la variable local es no nula. ¿Alguna idea de por qué esto puede pasar?

Traza de pila

app/assets/javascripts/slider.js.erb:2:in `evaluate_source'' tilt (1.3.3) lib/tilt/template.rb:209:in `instance_eval'' tilt (1.3.3) lib/tilt/template.rb:209:in `evaluate_source'' tilt (1.3.3) lib/tilt/template.rb:144:in `cached_evaluate'' tilt (1.3.3) lib/tilt/template.rb:127:in `evaluate'' tilt (1.3.3) lib/tilt/template.rb:76:in `render'' sprockets (2.0.3) lib/sprockets/context.rb:175:in `block in evaluate'' sprockets (2.0.3) lib/sprockets/context.rb:172:in `each'' sprockets (2.0.3) lib/sprockets/context.rb:172:in `evaluate'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:171:in `build_dependency_context_and_body'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:135:in `dependency_context'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:194:in `build_dependencies_paths_and_assets'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:141:in `dependency_paths'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:61:in `mtime'' sprockets (2.0.3) lib/sprockets/asset.rb:58:in `block in encode_with'' sprockets (2.0.3) lib/sprockets/asset.rb:57:in `each'' sprockets (2.0.3) lib/sprockets/asset.rb:57:in `encode_with'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:43:in `encode_with'' sprockets (2.0.3) lib/sprockets/caching.rb:52:in `cache_asset'' sprockets (2.0.3) lib/sprockets/environment.rb:82:in `build_asset'' sprockets (2.0.3) lib/sprockets/base.rb:99:in `find_asset'' sprockets (2.0.3) lib/sprockets/environment.rb:72:in `find_asset'' sprockets (2.0.3) lib/sprockets/base.rb:110:in `[]'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:200:in `block in build_dependencies_paths_and_assets'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:194:in `each'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:194:in `build_dependencies_paths_and_assets'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:141:in `dependency_paths'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:61:in `mtime'' sprockets (2.0.3) lib/sprockets/asset.rb:58:in `block in encode_with'' sprockets (2.0.3) lib/sprockets/asset.rb:57:in `each'' sprockets (2.0.3) lib/sprockets/asset.rb:57:in `encode_with'' sprockets (2.0.3) lib/sprockets/bundled_asset.rb:43:in `encode_with'' sprockets (2.0.3) lib/sprockets/caching.rb:52:in `cache_asset'' sprockets (2.0.3) lib/sprockets/environment.rb:82:in `build_asset'' sprockets (2.0.3) lib/sprockets/trail.rb:102:in `find_asset_in_path'' sprockets (2.0.3) lib/sprockets/base.rb:101:in `find_asset'' sprockets (2.0.3) lib/sprockets/environment.rb:72:in `find_asset'' sprockets (2.0.3) lib/sprockets/base.rb:110:in `[]'' actionpack (3.1.0) lib/sprockets/helpers/rails_helper.rb:124:in `asset_for'' actionpack (3.1.0) lib/sprockets/helpers/rails_helper.rb:28:in `block in javascript_include_tag'' actionpack (3.1.0) lib/sprockets/helpers/rails_helper.rb:27:in `collect'' actionpack (3.1.0) lib/sprockets/helpers/rails_helper.rb:27:in `javascript_include_tag'' app/views/layouts/application.html.haml:7:in `_app_views_layouts_application_html_haml__2778507683501201875_51020080'' actionpack (3.1.0) lib/action_view/template.rb:144:in `block in render'' activesupport (3.1.0) lib/active_support/notifications.rb:55:in `instrument'' actionpack (3.1.0) lib/action_view/template.rb:142:in `render'' actionpack (3.1.0) lib/action_view/renderer/template_renderer.rb:52:in `render_with_layout'' actionpack (3.1.0) lib/action_view/renderer/template_renderer.rb:38:in `render_template'' actionpack (3.1.0) lib/action_view/renderer/template_renderer.rb:12:in `block in render'' actionpack (3.1.0) lib/action_view/renderer/abstract_renderer.rb:22:in `wrap_formats'' actionpack (3.1.0) lib/action_view/renderer/template_renderer.rb:9:in `render'' actionpack (3.1.0) lib/action_view/renderer/renderer.rb:36:in `render_template'' actionpack (3.1.0) lib/action_view/renderer/renderer.rb:17:in `render'' actionpack (3.1.0) lib/abstract_controller/rendering.rb:120:in `_render_template'' actionpack (3.1.0) lib/action_controller/metal/streaming.rb:250:in `_render_template'' actionpack (3.1.0) lib/abstract_controller/rendering.rb:114:in `render_to_body'' actionpack (3.1.0) lib/action_controller/metal/renderers.rb:30:in `render_to_body'' actionpack (3.1.0) lib/action_controller/metal/compatibility.rb:43:in `render_to_body'' actionpack (3.1.0) lib/abstract_controller/rendering.rb:99:in `render'' actionpack (3.1.0) lib/action_controller/metal/rendering.rb:16:in `render'' actionpack (3.1.0) lib/action_controller/metal/instrumentation.rb:40:in `block (2 levels) in render'' activesupport (3.1.0) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'' /home/mike/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310:in `realtime'' activesupport (3.1.0) lib/active_support/core_ext/benchmark.rb:5:in `ms'' actionpack (3.1.0) lib/action_controller/metal/instrumentation.rb:40:in `block in render'' actionpack (3.1.0) lib/action_controller/metal/instrumentation.rb:78:in `cleanup_view_runtime'' activerecord (3.1.0) lib/active_record/railties/controller_runtime.rb:24:in `cleanup_view_runtime'' actionpack (3.1.0) lib/action_controller/metal/instrumentation.rb:39:in `render'' actionpack (3.1.0) lib/action_controller/metal/implicit_render.rb:10:in `default_render'' actionpack (3.1.0) lib/action_controller/metal/implicit_render.rb:5:in `send_action'' actionpack (3.1.0) lib/abstract_controller/base.rb:167:in `process_action'' actionpack (3.1.0) lib/action_controller/metal/rendering.rb:10:in `process_action'' actionpack (3.1.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action'' activesupport (3.1.0) lib/active_support/callbacks.rb:425:in `_run__4540075312289376507__process_action__207230359584297735__callbacks'' activesupport (3.1.0) lib/active_support/callbacks.rb:386:in `_run_process_action_callbacks'' activesupport (3.1.0) lib/active_support/callbacks.rb:81:in `run_callbacks'' actionpack (3.1.0) lib/abstract_controller/callbacks.rb:17:in `process_action'' actionpack (3.1.0) lib/action_controller/metal/rescue.rb:17:in `process_action'' actionpack (3.1.0) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'' activesupport (3.1.0) lib/active_support/notifications.rb:53:in `block in instrument'' activesupport (3.1.0) lib/active_support/notifications/instrumenter.rb:21:in `instrument'' activesupport (3.1.0) lib/active_support/notifications.rb:53:in `instrument'' actionpack (3.1.0) lib/action_controller/metal/instrumentation.rb:29:in `process_action'' actionpack (3.1.0) lib/action_controller/metal/params_wrapper.rb:201:in `process_action'' activerecord (3.1.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'' actionpack (3.1.0) lib/abstract_controller/base.rb:121:in `process'' actionpack (3.1.0) lib/abstract_controller/rendering.rb:45:in `process'' actionpack (3.1.0) lib/action_controller/metal.rb:193:in `dispatch'' actionpack (3.1.0) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'' actionpack (3.1.0) lib/action_controller/metal.rb:236:in `block in action'' actionpack (3.1.0) lib/action_dispatch/routing/route_set.rb:65:in `call'' actionpack (3.1.0) lib/action_dispatch/routing/route_set.rb:65:in `dispatch'' actionpack (3.1.0) lib/action_dispatch/routing/route_set.rb:29:in `call'' rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'' rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'' rack-mount (0.8.3) lib/rack/mount/code_generation.rb:75:in `optimized_each'' rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'' rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'' actionpack (3.1.0) lib/action_dispatch/routing/route_set.rb:531:in `call'' warden (1.1.0) lib/warden/manager.rb:35:in `block in call'' warden (1.1.0) lib/warden/manager.rb:34:in `catch'' warden (1.1.0) lib/warden/manager.rb:34:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'' rack (1.3.5) lib/rack/etag.rb:23:in `call'' rack (1.3.5) lib/rack/conditionalget.rb:25:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/head.rb:14:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/params_parser.rb:21:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/flash.rb:243:in `call'' rack (1.3.5) lib/rack/session/abstract/id.rb:195:in `context'' rack (1.3.5) lib/rack/session/abstract/id.rb:190:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/cookies.rb:326:in `call'' activerecord (3.1.0) lib/active_record/query_cache.rb:62:in `call'' activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'' activesupport (3.1.0) lib/active_support/callbacks.rb:392:in `_run_call_callbacks'' activesupport (3.1.0) lib/active_support/callbacks.rb:81:in `run_callbacks'' actionpack (3.1.0) lib/action_dispatch/middleware/callbacks.rb:28:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/reloader.rb:68:in `call'' rack (1.3.5) lib/rack/sendfile.rb:101:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'' railties (3.1.0) lib/rails/rack/logger.rb:13:in `call'' rack (1.3.5) lib/rack/methodoverride.rb:24:in `call'' rack (1.3.5) lib/rack/runtime.rb:17:in `call'' activesupport (3.1.0) lib/active_support/cache/strategy/local_cache.rb:72:in `call'' rack (1.3.5) lib/rack/lock.rb:15:in `call'' actionpack (3.1.0) lib/action_dispatch/middleware/static.rb:53:in `call'' railties (3.1.0) lib/rails/engine.rb:455:in `call'' railties (3.1.0) lib/rails/rack/content_length.rb:16:in `call'' railties (3.1.0) lib/rails/rack/log_tailer.rb:14:in `call'' rack (1.3.5) lib/rack/handler/webrick.rb:59:in `service'' /home/mike/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'' /home/mike/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'' /home/mike/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread''


Con el nuevo canal de activos, dentro de los activos estáticos ( /app|lib|vendor/assets/ asset /app|lib|vendor/assets/ ) puede usar algunos ayudantes ''estáticos'' (es decir, <%= asset_path "/foo/bar" %> ), porque solo los compila una vez (si está en producción, es decir) y no cada vez que realice una solicitud http. Por lo tanto, no tiene sentido utilizar métodos como render (o cosas ''dinámicas'' en general) dentro de un activo estático.

Para su caso particular, podría usar las vistas * .js.erb (que "coincidirán" con una acción particular dentro del controlador) o javascript procesado directamente dentro del html.


No puedes usar Rails render. Pero es posible seguir usando parciales usando la representación de Erubis :: Eruby directamente.

$(document).ready(function() { $("#workout-week").append(<%= escape_javascript( Erubis::Eruby.new(File.read(File.join(Rails.root, ''app/views'', ''_show_training_period.html.erb''))).result(period: @period)) %>); });

O en haml

$(document).ready(function() { $("#workout-week").append(<%= escape_javascript( Haml::Engine.new(File.read(File.join(Rails.root, ''app/views'', ''_show_training_period.html.haml''))).render(Object.new, period: @period)) %>); });

Por alguna razón, el uso de ERB rompe la representación de la rueda dentada.
Y la forma vinculante de pasar las variables locales es demasiado fea.

Es una forma de evitarlo, pero es bueno recordar que no se recomienda usar parciales dentro de los activos. Una mejor manera es colocar el código parcial oculto en algún lugar del HTML y usarlo en sus javascripts.


Usted está tratando de utilizar la render de los activos. Desafortunadamente, no es posible ahora, mira this .