RAILS:脂肪控制器IF ELSE条件

Ami*_*mad -1 ruby ruby-on-rails

我在这里的方法中有一个非常复杂的if else条件,并且正在考虑使其简化并更容易阅读.

def check
  @friends = params[:friends]
  @key = User.find_by_email @friends[0]
  @val = User.find_by_email @friends[1]
  user1 = User.where(email: @friends[0])
  user2 = User.where(email: @friends[1])

  if Friendship.where(user: @key, friend: @val).exists?
    render json: {message: "Relationship already establish"}
  else
    if user1.exists? && !user2.exists?
      @user = @key
      @friend = User.create email: @friends[1]
      @user.friendships.create friend_id: @friend.id
      render json: {success: true}

    elsif !user1.exists? && user2.exists?
      @friend = @val
      @user = User.create email: @friends[0]
      @user.friendships.create friend_id: @friend.id
      render json: {success: true}

    elsif user1.exists? && user2.exists?
      if Friendship.where(user: @key, friend: @val).exists?
        render json: {message: "Relationship already establish"}
      else
        @user = @key
        @friend = @val
        @user.friendships.create friend_id: @friend.id
        render json: {success: true}
      end

    else
      @user = User.create email: @friends[0]
      @friend = User.create email: @friends[1]
      @user.friendships.create friend_id: @friend.id

      render json: {success: true}
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来简化这种方法,但仍然给我正确的结果

Leo*_*Leo 5

def check
  @user = User.find_or_create_by(email: params[:friends][0])
  @friend = User.find_or_create_by(email: params[:friends][1])

  if Friendship.where(user: @user, friend: @friend).exists?
    render json: {message: "Relationship already establish"}
  else
    @user.friendships.create(friend_id: @friend.id)
    render json: {success: true}
  end
end
Run Code Online (Sandbox Code Playgroud)