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.

Reply via email to