Proper idom for link_to_if

5 views
Skip to first unread message

James Byrne

unread,
Mar 24, 2008, 12:48:14 PM3/24/08
to rubyonra...@googlegroups.com
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?
--
Posted via http://www.ruby-forum.com/.

James Byrne

unread,
Mar 24, 2008, 12:50:59 PM3/24/08
to rubyonra...@googlegroups.com
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.

David A. Black

unread,
Mar 24, 2008, 12:53:52 PM3/24/08
to rubyonra...@googlegroups.com
Hi --

On Mon, 24 Mar 2008, James Byrne wrote:

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

--
Upcoming Rails training from David A. Black and Ruby Power and Light:
ADVANCING WITH RAILS April 14-17 New York City
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
CORE RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for more info!

James Byrne

unread,
Mar 24, 2008, 1:09:00 PM3/24/08
to rubyonra...@googlegroups.com
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?

James Byrne

unread,
Mar 24, 2008, 1:14:25 PM3/24/08
to rubyonra...@googlegroups.com
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.

Patrick Doyle

unread,
Mar 24, 2008, 1:15:47 PM3/24/08
to rubyonra...@googlegroups.com
On Mon, Mar 24, 2008 at 1:09 PM, James Byrne
<rails-mai...@andreas-s.net> wrote:
>
> 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) -%>

I wonder if you would have to write that as:

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

(notice the ":")?

newbies $.02

--wpd

David A. Black

unread,
Mar 24, 2008, 1:41:50 PM3/24/08
to rubyonra...@googlegroups.com
Hi --

On Mon, 24 Mar 2008, James Byrne wrote:

I also converted your example to a plain if (instead of link_to_if) --
just an artifact of having been playing around with it, but I imagine
you could translate it back :-) But my main point was about knowing
the helpers, etc., and I understand your point about just trying it
out.

James Byrne

unread,
Mar 24, 2008, 1:46:23 PM3/24/08
to rubyonra...@googlegroups.com
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.

Rob Biedenharn

unread,
Mar 24, 2008, 4:38:13 PM3/24/08
to rubyonra...@googlegroups.com
On Mar 24, 2008, at 1:46 PM, James Byrne wrote:
> 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
R...@AgileConsultingLLC.com

Reply all
Reply to author
Forward
0 new messages