On Oct 12, 9:19 pm, Dmitry Suzdalev <dim...@gmail.com> wrote: > Hello! > > In rails 3.1 app I have a controller UsersController with 'show' action. > show.html.erb contains: > > <% content_for(:head) do %> > <%= javascript_include_tag 'myscript' %> > <% end %> > <p>Hello @user.name</p> > > And I have this in myscript.js.erb > > $jQuery(document).ready(function() { > alert(<%= @user.name %>); > > }); > > @user is being assigned by a controller and it works just ok in > show.html.erb, but in myscript.js.erb I get nil as @user and exception is > thrown. > > What's my error here? How to get around this? > I googled, but all suggestions I found were about rendering partial and > using :local option to pass a variable to it. > Is this the only option? > I'm asking because I suspect I miss something. It would look really natural > for @user being accessible in js.erb loaded through > javascript_include_tag...
javascript_include_tag generates a <script> tag in the output. When the browser renders your page, it looks at that script tag and requests myscript.js from your server. By now, the original controller and its @user variable are long gone, you're instead looking at the @user from a new controller, which is apparently null. one way of dealing this might be <% content_for :head do %> <%= javascript_tag "var js_user_name = #{@user.name.to_json};" <%= javascript_include_tag 'my script' %> <% end %> which creates a (javascript) variable called js_user_name that your javascript would be able to use. Another option would be to pass information about which user to pick via a query parameter (i.e. instead of the url requested being /javascripts/myscript.js it would be /javascripts/myscript.js?user_id=123), and have the controller that renders the javascript set up @user accordingly. Fred -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.