2011-10-04 84 views
0

我是新手Ruby的用戶,我毫不猶豫地在這個部分的正確寫法:紅寶石 - IF,除非聲明

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

但IF結構的第一部分是錯誤的(尤其是PARAMS部分)。如果我嘗試這樣做:

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

所以我得到了一個不好的結果,但如果這樣的:

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

所以,現在我已經得到了一個很好的結果...

凡可能是一個問題?什麼可能是錯的?第一個代碼是我需要的,但我不知道,如何加入的一切....

+0

如果你問一個關於Ruby的問題,而不是Rails的,你不需要'<%'的東西。 –

回答

4

A != B AND C != D是不一樣的東西!(A == B AND C == D)

首先是真實的,只有當BOTH雙是不同。第二個是如果或者對不同。在你的例子中,如果你願意的話,將除非轉換爲:

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

因此,如果任何一個條件都不匹配,那麼條件爲真。

閱讀上在這裏 http://en.wikipedia.org/wiki/Logical_connective

2

如果這是爲你工作:

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

if等效是:

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

又路過那否定裏面你:

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

注意如何不僅==變得!=&&成爲||