开发者

One line if statement not working

<%if @item.rigged %>Yes<%else%>No<%end%>

I was thinking of something like this?

if @item.rigged ? "Yes" : "No" 

But it doesn't work. Ruby has the ||= but I"m not even sure ho开发者_JAVA技巧w to use that thing.


Remove if from if @item.rigged ? "Yes" : "No"

Ternary operator has form condition ? if_true : if_false


In Ruby, the condition and the then part of an if expression must be separated by either an expression separator (i.e. ; or a newline) or the then keyword.

So, all of these would work:

if @item.rigged then 'Yes' else 'No' end

if @item.rigged; 'Yes' else 'No' end

if @item.rigged
  'Yes' else 'No' end

There is also a conditional operator in Ruby, but that is completely unnecessary. The conditional operator is needed in C, because it is an operator: in C, if is a statement and thus cannot return a value, so if you want to return a value, you need to use something which can return a value. And the only things in C that can return a value are functions and operators, and since it is impossible to make if a function in C, you need an operator.

In Ruby, however, if is an expression. In fact, everything is an expression in Ruby, so it already can return a value. There is no need for the conditional operator to even exist, let alone use it.

BTW: it is customary to name methods which are used to ask a question with a question mark at the end, like this:

@item.rigged?

This shows another problem with using the conditional operator in Ruby:

@item.rigged? ? 'Yes' : 'No'

It's simply hard to read with the multiple question marks that close to each other.


One line if:

<statement> if <condition>

Your case:

"Yes" if @item.rigged

"No" if !@item.rigged # or: "No" unless @item.rigged


From what I know

3 one-liners

  1. a = 10 if <condition>

example:

a = 10 if true # a = 10
b = 10 if false # b = nil
  1. a = 10 unless <condition>

example:

a = 10 unless false # a = 10
b = 10 unless true # b = nil
  1. a = <condition> ? <a> : <b>

example:

a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100

I hope it helps.


Both the shell and C one-line constructs work (ruby 1.9.3p429):

# Shell format
irb(main):022:0> true && "Yes" || "No"
=> "Yes"
irb(main):023:0> false && "Yes" || "No"
=> "No"

# C format
irb(main):024:0> true ? "Yes" : "No"
=> "Yes"
irb(main):025:0> false ? "Yes" : "No"
=> "No"


if else condition can be covered with ternary operator

@item.rigged? ? 'Yes' : 'No'


For simplicity, If you need to default to some value if nil you can use:

@something.nil? = "No" || "Yes"


You can use:

(@item.rigged) ? "Yes" : "No"

If @item.rigged is true, it will return 'Yes' else it will return 'No'.


if apple_stock > 1
  :eat_apple
else
  :buy_apple
end

Above statement can written in form of ternerary statement in ruby as:

apple_stock > 1 ? :eat_apple : :buy_apple


Don't forget it can generate the content from the ruby tag:

  v
<%= @item.rigged? ? "Yes" : "No" %>

The tick (v) indicates using the equal sign to generate text in the html.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜