2011-10-04 5 views
0

Je suis un newbie utilisateur Ruby et je hésite sur l'écriture correcte de cette partie:Ruby - if et unless déclaration

<% if session[:user_id].nil? || (params[:controller] != 'home' && params[:action] != 'index') %> 
    something 
<% else %> 
    something else 
<% end %> 

Mais la première partie de la construction IF est faux (en particulier les params partie). Si j'essayé ceci:

<% if params[:controller] != 'home' && params[:action] != 'index' %> 

alors je suis un mauvais résultat, mais si celle-ci:

<% unless params[:controller] == 'home' && params[:action] == 'index' %> 

Alors maintenant, j'obtenu de bons résultats déjà un ...

Où pourrait être un problème ? Quel pourrait être un problème? Le premier code est ce que je dois, mais je ne sais pas, comment joindre tout ....

+0

Si vous posez une question sur Ruby plutôt que Rails, vous n'avez pas besoin de la substance '<%'. –

Répondre

4

A != B AND C != D est pas la même chose que !(A == B AND C == D)

Le premier est vrai que lorsque DEUX paires sont différent. Le second est vrai si SOIT paire est différente. Dans votre exemple, pour convertir le moins à un si vous le feriez:

<% if params[:controller] != 'home' || params[:action] != 'index' %> 

Alors que la condition est true si ne correspondent pas.

Lisez sur le sujet ici http://en.wikipedia.org/wiki/Logical_connective

2

Si cela fonctionne pour vous:

<% unless params[:controller] == 'home' && params[:action] == 'index' %> 

L'équivalent if serait:

<% if !(params[:controller] == 'home' && params[:action] == 'index') %> 

Et en passant que la négation à l'intérieur vous obtenez :

<% if params[:controller] != 'home' || params[:action] != 'index' %> 

Remarquez comment non seulement == devient != mais aussi && devient ||