Proper idom for link_to_if

What I wish to do is to have a construct like this in a view:

<%= link_to_if <some test>, "New Model View", new_model_path -%>

<some test> has to return true if new_model_path is defined and false
otherwise. What is the proper idiom to do this in rails 2?

James Byrne wrote:

defined? new_model_path

I do not know why I can spend so much time on something only to find the
answer after I have asked for help.

Hi --

What I wish to do is to have a construct like this in a view:

<%= link_to_if <some test>, "New Model View", new_model_path -%>

<some test> has to return true if new_model_path is defined and false
otherwise. What is the proper idiom to do this in rails 2?

I guess you could do:

   <% if respond_to?(:new_model_path) %>
     <%= link_to ... %>
   <% end %>

but that seems very brittle to me. By the time you're writing a view,
you should know what helper methods and named routes exist, and which
ones don't.

David

James Byrne wrote:

But I could not get it to work with link_to_if.

This does not work (syntax error)

<%= link_to_if((defined?(new_vendor_path)), 'New Vendor',
new_vendor_path) -%>

but this does

<%= link_to('New Vendor', new_vendor_path) if (defined?
(new_vendor_path)) -%>

Why?

David A. Black wrote:

Hi --

but that seems very brittle to me. By the time you're writing a view,
you should know what helper methods and named routes exist, and which
ones don't.

Yes and I do/will. But for the moment I am writing one side of a
bilaterally symmetrical application tree. I therefor wish to make this
functionality dynamic since I am frequently adding and deleting that
specific branch. It is not intended for production code.

I wonder if you would have to write that as:

<%= link_to_if(defined?(:new_vendor_path), ...

(notice the ":")?

newbies $.02

--wpd

Hi --

Patrick Doyle wrote:

I wonder if you would have to write that as:

<%= link_to_if(defined?(:new_vendor_path), ...

(notice the ":")?

I tried your suggestion and it does not change anything. I seemingly
cannot get link_to_if to work in this instance.

In order to call the link_to_if method, its arguments must first be evaluated.
With David's change to
   link_to(...) if defined? new_vendor_path
the arguments to the link_to() are only evaluated after the "defined? new_vendor_path" has returned true.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com