Forum: Ruby on Rails how to style currently active link

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
803ad415efcdcbf09b1addeb319650d7?d=identicon&s=25 Adam Akhtar (thegeezer3)
on 2009-02-09 11:04
I have four links on a page generated with link_to . I want to style the
currently active link differently than the other 3. I tried passing
:class => "selected" to link_to but it adds this tag to all 4 links, not
just the currently active one.

anyideas?

(this is for tabbed navigation)
80e4cb97cae5c8d745f72337d93fd8f2?d=identicon&s=25 MaD (Guest)
on 2009-02-09 11:39
(Received via mailing list)
i don't see your code, but generally it works like this:
  <%= link_to "Link name", { :controller => 'controller_name', :action
=> 'action_name' }, :class => 'someclass' %>

then you style your "someclass" via css.
803ad415efcdcbf09b1addeb319650d7?d=identicon&s=25 Adam Akhtar (thegeezer3)
on 2009-02-09 11:47
MaD wrote:
> i don't see your code, but generally it works like this:
>   <%= link_to "Link name", { :controller => 'controller_name', :action
> => 'action_name' }, :class => 'someclass' %>
>
> then you style your "someclass" via css.

Thanks for the reply, but doesnt the above add the class "someclass" to
all four links at the same time? I dont want to do taht, i want to add
something like "selected" to the currently active link and "unselected"
to the other three? If that is so how would you style the currently
selected link differently that the other three?
8c639c73cd3f657683b05bc2da9fc7ea?d=identicon&s=25 Juan José Vidal (Guest)
on 2009-02-09 11:51
(Received via mailing list)
I think that you're looking for something like that....

<%= link_to_unless_current('Add contact', new_contact_url, :class =>
'adduser') {  link_to('Add contact', new_contact_url, :class =>
'selected') } %>

http://apidock.com/rails/ActionView/Helpers/UrlHel...


Adam Akhtar escribió:
Da22eb702d7ab6c6c2f33a47ce9b1498?d=identicon&s=25 jammanbo (Guest)
on 2009-02-09 11:59
(Received via mailing list)
On Feb 9, 10:04 am, Adam Akhtar <rails-mailing-l...@andreas-s.net>
wrote:
> I have four links on a page generated with link_to . I want to style the
> currently active link differently than the other 3. I tried passing
> :class => "selected" to link_to but it adds this tag to all 4 links, not
> just the currently active one.
>
> anyideas?
>
> (this is for tabbed navigation)
> --
> Posted viahttp://www.ruby-forum.com/.

Well the problem is that you need to set class="#{'selected' if
SOMETHING}" so the question becomes "what is SOMETHING?".

This might get criticised but here is what I am doing in my current
app. I have a helper that looks something like

def class_for_link(uri)
    hsh = ActionController::Routing::Routes.recognize_path(uri,
{ :method => :get }) # You might need to gsub out the root of this url
first
    [hsh[:controller], hsh[:action]] == [controller.controller_name,
controller.action_name] ? 'active' : ''
end

Then in the views I can say something like

<%= link_to "John", person_path(1), :class => 'style1 style2 ' +
class_for_link(person_path(1)) %>
803ad415efcdcbf09b1addeb319650d7?d=identicon&s=25 Adam Akhtar (thegeezer3)
on 2009-02-09 13:17
Thank you both for your responses.

Ive gone with Juans as it does what i need is shorter code. The only one
problem is that it results in the selected link still being selectABLE
ie. it can still be clicked on even though its the current page in view.
I can style it so that it looks like it isnt clickable so top banana!

if there is a way to fix this minor side issue id love to know.

many thanks
8c639c73cd3f657683b05bc2da9fc7ea?d=identicon&s=25 Juan José Vidal (Guest)
on 2009-02-09 13:23
(Received via mailing list)
In this video you'll see the behaviour you're looking for... (min 33)

http://s3.amazonaws.com/lr_screencasts/learningrails-17.mov

Adam Akhtar escribió:
This topic is locked and can not be replied to.