2

OK、私は緑ですが、次の定義は double-negative-y のようです

def signed_in?
  !current_user.nil?  #the current user is not...um...not
end

私の辛抱強い指導者である M.Hartl がRails のチュートリアルで使用しているためです。きしむ音だと思いますが...

「現在のユーザーは」と言う方がきれいではないでしょうか?

def signed_in?
  current_user
  current_user.present?
  current_user.any?
  !!current_user
end

バングの利点は何ですか?

4

3 に答える 3

5
current_user          | nil    | false  | true  | ""    | []    | [nil] | [0]  
-----------------------------------------------------------------------------------
current_user          | nil    | false  | true  | ""    | []    | [nil] | [0]
!current_user.nil?    | false  | true   | true  | true  | true  | true  | true
!!current_user        | false  | false  | true  | true  | true  | true  | true
current_user.present? | false  | false  | true  | false | false | true  | true
current_user.any?     | error  | error  | error | error | false | false | true
于 2012-12-08T05:06:05.183 に答える
1

あなたは出来る:

def signed_in?
  current_user
end

メソッドから返されたブール値ではないことに耐えられる場合。current_user が nilsigned_in?の場合、if ステートメントで使用すると false と評価されます。nilをチェックするには?必要ではなく、スタイルの問題だと思います。

または、呼び出しコードで次のことができます。

if current_user
  # do stuff
end

余分なメソッドを取り除きます。

于 2012-12-08T09:02:44.723 に答える
1

その例では、ユーザーが誰であるかは気にしません。知りたいのは、ユーザー、任意のユーザーがサインインしていることだけです。サインインしている場合は、サインインしているユーザーのリンクが表示されます。

current_user.nil?ブール値です。ユーザーがサインインしている場合は false になります。前のバンはそれを反転させるため、ユーザーがサインインしている場合は true になり、そう!current_user.nil?ない場合は false になります。

まさにそれを達成するための、それ以上でもそれ以下でもなく、同じように簡潔な方法を他に思いつきますか?

于 2012-12-08T04:21:54.670 に答える