writing if statement in one line with elsif condition

  • Thread starter Luiz Vitor Martinez Cardoso
  • Start date
L

Luiz Vitor Martinez Cardoso

I'm trying to convert it:

<% if @recipes.length =3D=3D (i+1) %>
<% @id =3D 0 %>
<% elsif i.remainder(2) =3D=3D 1 %>
<% @id =3D 1 %>
<% else %>
<% @id =3D 2 %>
<% end %>

To something like:

<% if @recipes.length =3D=3D (i+1) then @id =3D 0 ; elsif
i.remainder(2) =3D=3D 1 then @id =3D 1 ; else @id =3D 2 end >%

But in my tests the elsif condition is totally ignored, why?

Thanks for you attention!

--=20
Regards,

Luiz Vitor Martinez Cardoso
cel.: (11) 8187-8662
blog: rubz.org
engineer student at maua.br

"Posso nunca chegar a ser o melhor engenheiro do mundo, mas tenha certeza d=
e
que eu vou lutar com todas as minhas for=E7as para ser o melhor engenheiro =
que
eu puder ser"
 
P

Phlip

Luiz said:
<% if @recipes.length == (i+1) then @id = 0 ; elsif
i.remainder(2) == 1 then @id = 1 ; else @id = 2 end >%

How about this?

<% if @recipes.length == (i+1)
@id = 0
elsif i.remainder(2) == 1
@id = 1
else
@id = 2
end %>

I can't see what your specific error is, but that structure will at least be
easier to read and debug.

Also, any logic you can move to a controller - out of the <% erb %> - move it
there. Or better, into a model. The view should have the minimum possible logic.
 
T

Todd Benson

I'm trying to convert it:

<% if @recipes.length == (i+1) %>
<% @id = 0 %>
<% elsif i.remainder(2) == 1 %>
<% @id = 1 %>
<% else %>
<% @id = 2 %>
<% end %>

To something like:

<% if @recipes.length == (i+1) then @id = 0 ; elsif
i.remainder(2) == 1 then @id = 1 ; else @id = 2 end >%

But in my tests the elsif condition is totally ignored, why?

Not sure, but...

if 1==1 then 'a' elsif 'a'=='a' then 'b' else 'c' end
=> "a"

if 1==2 then 'a' elsif 'a'=='b' then 'b' else 'c' end
=> "c"


With a cursory glance, I can only guess that your first condition is
always true. Maybe somebody could pipe in about ERB if that's a
factor, because I'm not familiar with it.

Todd
 
S

Stefano Crocco

I'm trying to convert it:

<% if @recipes.length == (i+1) %>
<% @id = 0 %>
<% elsif i.remainder(2) == 1 %>
<% @id = 1 %>
<% else %>
<% @id = 2 %>
<% end %>

To something like:

<% if @recipes.length == (i+1) then @id = 0 ; elsif
i.remainder(2) == 1 then @id = 1 ; else @id = 2 end >%

But in my tests the elsif condition is totally ignored, why?

Thanks for you attention!

It should work. Look at this:

require 'erb'
puts "Insert a number"
n = gets.to_i
str = '<%= if n%3 == 0 then "divisible by three";elsif n%2==0 then "divisible by two";end%>'
puts ERB.new(str).result

Entering 3 gives "divisible by 3", while entering 2 gives "divisible by two".

Stefano
 
R

Robert Klemme

I'm trying to convert it:

<% if @recipes.length == (i+1) %>
<% @id = 0 %>
<% elsif i.remainder(2) == 1 %>
<% @id = 1 %>
<% else %>
<% @id = 2 %>
<% end %>

To something like:

<% if @recipes.length == (i+1) then @id = 0 ; elsif
i.remainder(2) == 1 then @id = 1 ; else @id = 2 end >%

But in my tests the elsif condition is totally ignored, why?

Thanks for you attention!

Agreeing with the others: it's probably your expectation about the first
condition which is wrong.

Btw, here's another way to do it

@id = case when @recipes.length == i + 1: 0; when i.remainder(2) == 1:
1; else 2 end

Although I admit that I'd rather have it on several lines

@id = case
when @recipes.length == i + 1: 0
when i.remainder(2) == 1: 1
else 2
end

Kind regards

robert
 
P

Phlip

@id = case when @recipes.length == i + 1: 0; when i.remainder(2) == 1:
1; else 2 end

Although I admit that I'd rather have it on several lines

I suspect the original posted might not know you can write a multi-line
<% erb %> block! Some sample code puts a different <% %> on each line,
like the original post did...
 
L

Luiz Vitor Martinez Cardoso

Philp,

I really know!

Thanks,

@id =3D case when @recipes.length =3D=3D i + 1: 0; when i.remainder(2) = =3D=3D 1: 1;

I suspect the original posted might not know you can write a multi-line
<% erb %> block! Some sample code puts a different <% %> on each line,
like the original post did...


--=20
Regards,

Luiz Vitor Martinez Cardoso
cel.: (11) 8187-8662
blog: rubz.org
engineer student at maua.br

"Posso nunca chegar a ser o melhor engenheiro do mundo, mas tenha certeza d=
e
que eu vou lutar com todas as minhas for=E7as para ser o melhor engenheiro =
que
eu puder ser"
 
L

Luiz Vitor Martinez Cardoso

Just for curious. I'm curious when i'm learning something new ;)

Regards,

Luiz Vitor Martinez Cardoso wrote:

I really know!

But did any respondent challenge the requirement? Why should any statemen= t
have to fit on one line??


--=20
Regards,

Luiz Vitor Martinez Cardoso
cel.: (11) 8187-8662
blog: rubz.org
engineer student at maua.br

"Posso nunca chegar a ser o melhor engenheiro do mundo, mas tenha certeza d=
e
que eu vou lutar com todas as minhas for=E7as para ser o melhor engenheiro =
que
eu puder ser"
 
M

Michael Morin

Luiz said:
I'm trying to convert it:

<% if @recipes.length == (i+1) %>
<% @id = 0 %>
<% elsif i.remainder(2) == 1 %>
<% @id = 1 %>
<% else %>
<% @id = 2 %>
<% end %>

To something like:

<% if @recipes.length == (i+1) then @id = 0 ; elsif
i.remainder(2) == 1 then @id = 1 ; else @id = 2 end >%

But in my tests the elsif condition is totally ignored, why?

Thanks for you attention!

Ideally, even this rather trivial code is best left outside of ERB
files. Hide this away in a function and it can be as clean and
multi-liney as you want and doesn't muck up your ERB files. This is
doubleplus true if this code is used more than once. Cramming the
entire if statement onto line just makes it less readable.

--
Michael Morin
Guide to Ruby
http://ruby.about.com/
Become an About.com Guide: beaguide.about.com
About.com is part of the New York Times Company
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top