Add css class to rails link_to helper

Ruby on-Rails

Ruby on-Rails Problem Overview


I'm trying to style a rails link using css using the following code:

<%= link_to "Learn More", :controller => "menus", :action => "index", :class => "btn btn-inverse" %>

I would expect that this would create a link that looks like this:

<a href="menus/" class="btn btn-inverse">Learn More</a>

Instead, rails is rendering this -

<a href="/menus?class=btn+btn-inverse">Learn More</a>

Has anyone else had this problem / know what I'm doing wrong? I know I can avoid this problem by manually creating the anchor tag rather than using helper, but I was wondering if there was a way to pass the css class info to the helper itself. I'm using Rails 3.2.6.

Thanks!

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

You have a syntax problem. Try this instead:

<%= link_to "Learn More", {controller: "menus", action: "index"}, class: "btn btn-inverse" %>

Some documentation for you to go further with the link_to Helper

They say:

> Be careful when using the older argument style, as an extra literal hash is needed: > > link_to "Articles", { :controller => "articles" }, :id => "news", :class => "article" > # => Articles > > Leaving the hash off gives the wrong link: > > link_to "WRONG!", :controller => "articles", :id => "news", :class => "article" > # => WRONG!


I recommend you to use the URL helper generated following your routes configuration. In your case:

link_to "Learn More", menus_path, :class => "btn btn-inverse"

A little reminder on the Helpers generated:

# routes.rb
resources :users

# any view/controller
users_path #=> /users
edit_user_path(user) #=> /users/:id/edit
user_path(user) #=> /users/:id  (show action)
new_user_path(user) #=> /users/new

Solution 2 - Ruby on-Rails

Try new argument convention:

<%= link_to 'Learn More', 'menus#index', class: 'btn btn-inverse' %>

Solution 3 - Ruby on-Rails

if you do not have a controller action / route necessary for the link, you can pass nil as the placeholder and get the classes to apply as necessary

<%= link_to 'link verbiage', nil,  class: 'classes for action tag'%>

Solution 4 - Ruby on-Rails

I solved my problem by the way

<%= link_to image_tag("imageexamplo.png", class: 'class or id examplo css'),{controller: "user" , action: "index"}%>

Solution 5 - Ruby on-Rails

This is how i solved it using another view engine, HAML just in case a fellow developer is having this need

%i= link_to "Add New Blog Post", user_post_edit_new_url(current_user), :class  => "fa fa-plus-circle"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBlakeView Question on Stackoverflow
Solution 1 - Ruby on-RailsMrYoshijiView Answer on Stackoverflow
Solution 2 - Ruby on-RailsKamesh PrasadView Answer on Stackoverflow
Solution 3 - Ruby on-RailsSMAGView Answer on Stackoverflow
Solution 4 - Ruby on-RailsCaetanoView Answer on Stackoverflow
Solution 5 - Ruby on-Railsd1jhoni1bView Answer on Stackoverflow