Kim Griggs wrote:
I want to disable my navigation depending on two conditions: 1) the
page is not the current one, 2) the page is not in the session.
I have tried:
<%= link_to_unless @page.nil? or current_page?, "My ICA
Pages" , :controller => 'page', :action => 'list'%>
--gives me errors
<%= link_to_unless( @page.nil?,"",{})do link_to_unless_current "My ICA
Pages" , :controller => 'page', :action => 'list'%>
--no link is ever displayed
any suggestions. Code examples are always helpful.
Thanks in advance, K
Consider using @page.blank? instead of @page.nil?. Also, consider inserting
this above the statement:
<% RAILS_DEFAULT_LOGGER.debug("page was: #{@page} and current_page? is
#{current_page?}) %>
<% RAILS_DEFAULT_LOGGER.debug("My or expression evaluates to: #...@page.nil?
or current_page?}) %>
<% RAILS_DEFAULT_LOGGER.debug("My || expression evaluates to: #...@page.nil?
>> current_page?}) %>
If you tail your development.log, it should give you an idea what's going
on.
Sorry, should have explained myself better.
@page is a session variable so @page.nil? is correct. I want to check
if the session contains the page (which is a model in my app)
I am well aware on how to debug, thanks anyways.
The problem is that the things I have tried are not formatted
correctly, thats what I am looking for.
How do I use two conditions in the link_to_unless or if I can't, how
can I use the block statement in link_to_unless to then call
link_to_unless_current, or any other suggestions on how to disable a
link depending on two conditions.
Thanks,
Kim
Your problem is initially using 'or' which is very low precedence:
<%= (link_to_unless @page.nil?) or (current_page?, "My ICA Pages" , :controller => 'page', :action => 'list') %>
--gives me errors
With the precedence made explicit, the reason for errors should become obvious.
<%= link_to_unless( @page.nil?,"",{}) do link_to_unless_current "My ICA Pages" , :controller => 'page', :action => 'list'%>
--no link is ever displayed
Do you have a test? I suspect that you don't, but I'll leave that as an exercise.
<%= link_to_unless(@page.nil? || current_page?(:controller => 'page', :action => 'list'),
"My ICA Pages", :controller => 'page', :action => 'list') %>
Which will be a link having anchor text "My ICA Pages" or just the plain text if either condition is true. If you want different text for the non-link case:
<%= link_to_unless(@page.nil? || current_page?(:controller => 'page', :action => 'list'),
"My ICA Pages", :controller => 'page', :action => 'list') {|txt| "No link to #{txt}"} %>
If you want *nothing at all*, then use:
<% unless @page.nil? || current_page?(:controller => 'page', :action => 'list') %>
<%= link_to("My ICA Pages", :controller => 'page', :action => 'list') %>
<% end %>
Does that get you where you're trying to go?
-Rob
Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com