Ruby on Rails Monday, April 15, 2019

I have a question about using link_to  in template and in console

Say I do rails new blah,  I make a model called User, I make a table users, each user has a field called 'name'.  I have resources :users, in  config/routes.rb And I add some users.

in template, I can do 

<% @z=User.find_by(name:"bob") %>
<%= link_to 'aaa',@z   %>

I understand that it will take that variable @z  which is a reference to a user, and will convert it to  user_path(@z.id)

And I can do for example

<%= link_to 'aaa',user_path(@z.id) %>

And in the console, I can say 

>puts app.user_path(1)
/users/1

But I notice that in the console I can't do that shorthand as shown above with @z

I can say 

irb(main):003:0> helper.link_to("aaa",app.user_path(4))
=> "<a href=\"/users/4\">aaa</a>"
#<User id: 3, name: "bob">

irb> user=User.find_by(name:"bob")
irb(main):005:0> helper.link_to("aaa",user)
Traceback (most recent call last):
        1: from (irb):5
ArgumentError (arguments passed to url_for can't be handled. Please require routes or provide your own implementation)
irb(main):006:0> 

And also, I notice that in the template, while I can say user_path(@z.id), I can't say app.user_path(@z.id)

Why is it that in the console, I can't use that shorthand of writing @z or user, in a link_to, with that variable as an argument, when that variable points to a user. Whereas I can in a template.

And why is it that in a template, I can't refer to app.user_path  only to user_path ?

Thanks

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/02beb053-f703-4611-99ce-8f6091d0655b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment