[RUBY-ON-RAILS] 액티브는 레일 : 현재 사용자를 제외한 모든 사용자 찾기
RUBY-ON-RAILS액티브는 레일 : 현재 사용자를 제외한 모든 사용자 찾기
나는 이것이 매우 간단해야한다고 생각하지만 내 뇌는 그것을 단락된다. 나는 현재 사용자를 나타내는 객체를 가지고 있고, 현재 사용자를 제외한 모든 사용자에 대한 쿼리 할 경우, 어떻게 현재 사용자가 때때로 nil이 될 수 있음을 고려하여,이 작업을 수행 할 수 있습니까?
이것은 내가 지금 뭐하는 거지 것입니다 :
def index
@users = User.all
@users.delete current_user
end
내가하지 같은 일은 내가 쿼리 결과에 대한 사후 처리를하고있는 중이 야한다는 것입니다. 조금 틀린 느낌 외에, 나는 will_paginate으로 실행하는 동안 쿼리를 변환 할 경우이 잘 작동합니다 생각하지 않습니다. 쿼리와 함께이 작업을 수행하는 방법에 대한 어떤 제안? 감사.
해결법
-
==============================
1.레일 4까지에서 다음을 수행 할 수 있습니다 :
레일 4까지에서 다음을 수행 할 수 있습니다 :
User.where.not(id: id)
당신은 좋은 범위를 포장 할 수 있습니다.
scope :all_except, ->(user) { where.not(id: user) } @users = User.all_except(current_user)
당신이 원하는 경우 또는 클래스 메소드를 사용합니다 :
def self.all_except(user) where.not(id: user) end
두 가지 방법은 AR 관계 객체를 반환합니다. 이것은 당신이 할 수있는 체인 메서드 호출을 의미한다 :
@users = User.all_except(current_user).paginate
()는 배열을 곳을 받아들이 때문에 사용자의 수를 제외 할 수 있습니다.
@users = User.all_except([1,2,3])
예를 들면 :
@users = User.all_except(User.unverified)
그리고 심지어는 다른 협회를 통해 :
class Post < ActiveRecord::Base has_many :comments has_many :commenters, -> { uniq }, through: :comments end @commenters = @post.commenters.all_except(@post.author)
은 API 문서 도구에서 () where.not 참조하십시오.
-
==============================
2.
@users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id]))
-
==============================
3.또한 named_scope를 만들 수 있습니다, 예를 들어, 모델의 :
또한 named_scope를 만들 수 있습니다, 예를 들어, 모델의 :
named_scope :without_user, lambda{|user| user ? {:conditions => ["id != ?", user.id]} : {} }
및 컨트롤러 :
def index @users = User.without_user(current_user).paginate end
전무와 다른 경우 PARAM에 주어진 제외한 모든 사용자를 호출 할 때이 범위는 모든 사용자를 반환합니다. 이 솔루션의 장점은 체인에 다른 이름 범위 또는 will_paginate PAGINATE 방법이 전화 무료이다.
-
==============================
4.여기에 짧은 버전입니다 :
여기에 짧은 버전입니다 :
User.all :conditions => (current_user ? ["id != ?", current_user.id] : [])
-
==============================
5.GhandaL의 대답에 하나의 참고 - 레일 3 적어도, 그것은 가치가 수정의
GhandaL의 대답에 하나의 참고 - 레일 3 적어도, 그것은 가치가 수정의
scope :without_user, lambda{|user| user ? {:conditions => ["users.id != ?", user.id]} : {} }
(여기에서 주 변화되는 "ID = ...! 'users.id = ...!; 대신 named_scope의 범위는 레일 (3)에 대해)
단순히 사용자 테이블을 범위 지정하면 원래 버전은 잘 작동합니다. (....) 예컨대 team.members.without_user (CURRENT_USER) 연관하여 범위를 적용하는 경우,이 변화는 우리는 ID 비교를 위해 사용하고있는 테이블 명확히 요구되었다. 나는 그것없이 (SQLite는 사용) SQL 오류를 보았다.
사과는 별도의 답변을 ... 난 아직 GhandaL의 대답에 직접 의견을 명성이 없습니다.
-
==============================
6.내가 사용하는 아주 쉬운 솔루션
내가 사용하는 아주 쉬운 솔루션
@users = User.all.where("id != ?", current_user.id)
-
==============================
7.User.all.where ( "ID NOT IN (?)", current_user.id) 예외를 통과한다 것 여기서 정의 방법 번호 <어레이 : 0x0000000aef08f8>
User.all.where ( "ID NOT IN (?)", current_user.id) 예외를 통과한다 것 여기서 정의 방법 번호 <어레이 : 0x0000000aef08f8>
User.where("id NOT IN (?)", current_user.id)
-
==============================
8.당신이 그것을 할 수있는 또 다른 쉬운 방법 :
당신이 그것을 할 수있는 또 다른 쉬운 방법 :
@users = User.all.where("id NOT IN(?)", current_user.id)
-
==============================
9.배열이 더 도움이 될 것입니다
배열이 더 도움이 될 것입니다
arrayID [0] = 1
arrayID [1] = 3
User.where.not (ID : arrayID)
-
==============================
10.User.where (: id.ne => current_user.id)
User.where (: id.ne => current_user.id)
-
==============================
11.당신이하고있는 것은 @users 배열에서 CURRENT_USER를 삭제합니다. 배열에 대한 삭제 방법이 아니므로이 작동하지 않습니다. 당신이 아마하고 싶은 것은 이것이다
당신이하고있는 것은 @users 배열에서 CURRENT_USER를 삭제합니다. 배열에 대한 삭제 방법이 아니므로이 작동하지 않습니다. 당신이 아마하고 싶은 것은 이것이다
def index @users = User.all @users - [current_user] end
이것은 @users 어레이의 복사본을 반환하지만 CURRENT_USER 오브젝트를 제거하여 (IT는 처음에 배열에 포함시켰다.
주 : 배열 공제가 정확한 객체의 일치가 아닌 콘텐츠를 기반으로하는 경우이 작동하지 않을 수 있습니다. 나는 그것을 시도하지만 그것은 문자열했다. 배열로 강제로 []에 CURRENT_USER를 둘러싸 기억.
from https://stackoverflow.com/questions/2672744/rails-activerecord-find-all-users-except-current-user by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] (3) 여러 레코드와 양식을 제출 레일 (0) | 2020.02.16 |
---|---|
[RUBY-ON-RAILS] 가장 좋은 방법은 레일 + 포스트 그레스에 임의의 시간 간격으로 기록을 계산하려면 (0) | 2020.02.16 |
[RUBY-ON-RAILS] 레일 3.0에서 f.error_messages (0) | 2020.02.16 |
[RUBY-ON-RAILS] 어떻게 레일의 URL에서 쿼리 문자열을 얻을 수 있습니다 (0) | 2020.02.16 |
[RUBY-ON-RAILS] 이 레일에 루비의 쿼리 문자열 인 것처럼 문자열을 구문 분석 (0) | 2020.02.16 |