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
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.
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 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.
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?
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.