Link_to with additional data

Hi,

rails 3.2.8

I must be missing something basic (and it’s been driving me mad) because
I
am trying to send one additional data attribute to my controller from a
link, but I can’t seem to get it into the params received by the
controller.

I have looked around and found answers, but none seem to affect my
links.

I’ve set up a dummy app with a home page and a single link to a contacts
page - here is the code:

routes.rb

root :to => ‘home#index’, :as => ‘home’
resource ‘contacts’

Haml Home Page View

I want to be able to display ‘bar’ on the contacts page

= link_to “Contacts”, contacts_path, :data => {:foo => ‘bar’}

The generated html link:

contacts

But I don’t receive the foo attribute in the params object in the show
action of ContactsController.

If I add {:method => :post} to link_to, then it routes to the create
action
of the ContactsController but again, foo is missing.

= link_to “Contacts”, contacts_path, {:method => :post, :data => {:foo
=>
‘bar’}}

generates:

contacts

Can anyone point me in the right direction?

Thanks

Paul

Am 10.10.2012 09:47 schrieb “paul h” [email protected]:

I want to be able to display ‘bar’ on the contacts page

= link_to “Contacts”, contacts_path, :data => {:foo => ‘bar’}

Should be params=>… I here if I recall correctly.

Hi Norbert,

Thanks for the reply, but can you elaborate a little?

On Wednesday, October 10, 2012 12:01:54 PM UTC+1, Norbert M. wrote:

Am 10.10.2012 09:47 schrieb “paul h” <[email protected] <javascript:>>:

I want to be able to display ‘bar’ on the contacts page

= link_to “Contacts”, contacts_path, :data => {:foo => ‘bar’}

Should be params=>… I here if I recall correctly.

Doesn’t appear to be, replacing :data with :params changes the HTML link
as
follows:
data-foo=‘bar’ becomes params="{:foo=>“bar”}"

Changing :data to params just mashes up the html link.

AFAIK the generated HTML link is correct data-foo=‘bar’, shouldn’t this
be
accessible in the controller as part of the params hash?

If I inspect the params hash, all that is there is the usual key/value
pairs: controller, action, (when applicable => id, method,
authenticity_token).

How can I send an additional data attribute to the controller? Do I have
problem with my routes?

Thanks

Paul

On Wed, Oct 10, 2012 at 11:25 PM, paul h [email protected] wrote:

= link_to “Contacts”, contacts_path, :data => {:foo => ‘bar’}
AFAIK the generated HTML link is correct data-foo=‘bar’, shouldn’t this be
accessible in the controller as part of the params hash?

If I inspect the params hash, all that is there is the usual key/value
pairs: controller, action, (when applicable => id, method,
authenticity_token).

How can I send an additional data attribute to the controller? Do I have
problem with my routes?

pass it on the named route

link_to ‘foo’, foo_path(:foo => ‘bar’, :blah => ‘baz’)

[email protected].
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/lN53bwOAiNoJ.

For more options, visit https://groups.google.com/groups/opt_out.

On 10 October 2012 08:47, paul h [email protected] wrote:

I’ve set up a dummy app with a home page and a single link to a contacts
= link_to “Contacts”, contacts_path, :data => {:foo => ‘bar’}

= link_to “Contacts”, contacts_path, {:method => :post, :data => {:foo =>
‘bar’}}

generates:

contacts

What do you see in development.log when you click the link. It should
show you the parameters being passed. Also if you do params.inspect
what do you see? You can put that in a view or use a debugger.

Colin

On Wednesday, 10 October 2012 06:25:25 UTC-7, paul h wrote:

I want to be able to display ‘bar’ on the contacts page

Data-attributes are intended for code on the page (JS, etc) to use -
they
don’t get sent to the server unless you’re doing something fancy with JS
to
send them. You’ll want to pass additional parameters to the URL helper
(contacts_path in your example) to get them in the controller.

–Matt J.

On Wednesday, October 10, 2012 5:38:15 PM UTC+1, Matt J. wrote:

as follows:

How can I send an additional data attribute to the controller? Do I have
problem with my routes?

Data-attributes are intended for code on the page (JS, etc) to use -
they don’t get sent to the server unless you’re doing something fancy with
JS to send them. You’ll want to pass additional parameters to the URL
helper (contacts_path in your example) to get them in the controller.

Thanks for the info Matt. Now I remember where I may have seen it used -
I
think it was a Railscast for Unobtrusive JS.

On Wednesday, October 10, 2012 2:30:57 PM UTC+1, jim wrote:

On Wednesday, October 10, 2012 12:01:54 PM UTC+1, Norbert M. wrote:
Doesn’t appear to be, replacing :data with :params changes the HTML link
authenticity_token).

How can I send an additional data attribute to the controller? Do I have
problem with my routes?

pass it on the named route

link_to ‘foo’, foo_path(:foo => ‘bar’, :blah => ‘baz’)

Thanks Jim, that’s what I was after. I confused something I saw
previously
with JS (thanks to Matt (below) for jogging my memory) - probably the
Railscast for Unobtrusive JS.

Thanks again.

On Wednesday, October 10, 2012 3:28:45 PM UTC+1, Colin L. wrote:

link, but I can’t seem to get it into the params received by the
root :to => ‘home#index’, :as => ‘home’

generates:

contacts

What do you see in development.log when you click the link. It should
show you the parameters being passed. Also if you do params.inspect
what do you see? You can put that in a view or use a debugger.

Hi Colin,

That’s basically what I was doing - passing params.inspect to the view
so I
could see exactly was there.

I wasn’t getting anything other than the standard params hash you’d
expect
for a simple link - controller, action, id.

Thanks for the reply.