1

これが私のコードです:

- unless Relationship.are_friends?(current_user, @user) && (current_user != @user)
  - puts "d"*100
  - puts "#{current_user.inspect}"
  - puts "#{@user.inspect}"
  = link_to "Add Friend", controller: "relationships", action: "req", name: @user.name,      remote: true, class: "friend_link"

基本的に、2 番目の条件「current_user != @user」が機能しておらず、その理由がわかりません。現在のユーザーと @user を入力すると、正しく機能しています。@user = User.find_by_name(params[:name])。

助けてくれてありがとう!

4

2 に答える 2

1

これがあなたの要件だと思います。次の場合、A が B を友達として追加できるようにします。

  • A と B はまだ友達ではありません。
  • AさんとBさんは同一人物ではありません

したがって、疑似コードでは、(already_friends または same_person) allow_add_friend end を除きます。

これが要件である場合、ステートメントは次のようになります。

unless Relationship.are_friends?(current_user, @user) or (current_user == @user)

&&に変更されor、 に!=変更されたことに注意してください==

于 2013-10-07T03:24:14.413 に答える
1

unless多くの場合、特に複数の条件がある場合は、少し直感に反します。このように見てください:

true && false # => false, code is executed
false && true # => false, code is executed

ブロックがスキップされる唯一の条件は次のとおりです。

true && true  # => true, code is not executed

あなたがしようとしているのは、ブロックをスキップすることであり、どちらかの条件が真であると想像します。その場合、||演算子を使用する必要があります。

unless Relationship.are_friends?(current_user, @user) || (current_user == @user)
  #etc..
于 2013-10-07T03:25:04.633 に答える