2017-01-16 1 views
0

환경 범위를 사용하여 -, 비 사용자 내부에서의 CURRENT_USER의 user.superuser 위해 true 또는 false를 반환합니다 하나를 범위로 재생하고 생성하려고 루비 2.3예기치 않은 출력

4.2 레일 모델/컨트롤러. current_user.superuser = true 일 때 예상되는 출력을 얻었지만 false는 그냥 왼쪽 필드를 벗어납니다.

내역 : 쿼리 할 때를위한

appliance.rb (모델)

scope :superuser, ->(user) { user.superuser ? true : false } 

appliance_controller.rb

def list 
    @appliances = Appliance.all.order(:idtag) 
    @users = User.all 
end 

list.html.haml

%h5 
    = "Is the user a superuser? #{Appliance.superuser(current_user).to_s}" 

레일 콘솔 오 경우 0> Appliance.superuser (CURRENT_USER)

=> 진정한

레일 본체 : 007 : 수퍼을 갖는다 SER은 (주) 참

irb(main):006:0* current_user = User.first User Load ... #<User id: 3, superuser: true> 

IRB 특성 집합 수퍼 유저 속성이 false로 설정된 사용자에게 쿼리하기

irb(main):008:0> current_user = User.last User Load # User id: 6, superuser: false> 
,

IRB (주) : 010 : 0 * Appliance.superuser (CURRENT_USER)

기기 부하 (4.1ms)는 "가전"SELECT * "가전"

=> # 액티브 :: 관계 [# FROM. 어플라이언스 ID : 1, ... updated_at : "...">, #Appliance 아이디 : 2, ... updated_at : "...">]>

은 기본적으로는 Appliance.all 반환 덤핑 것 false 대신 ActiveRecord_relation. 왜 이런 일이 일어 났는지 설명 할 수 있습니까? 레일로

api

답변

0

:

범위 검색하고 질의 객체의 클래스를 추가 방법. 이 메서드는 다른 범위와 조합 가능한 ActiveRecord :: Relation 객체를 반환하기위한 것입니다. nil 또는 false를 반환하면 대신 모든 범위가 반환됩니다.

이렇게 예기치 않은 예상되는 동작은 아닙니다. 범위가 false이면 all 범위를 적용하고 Appliance 레코드 (모두 activerecord relation 개체)를 덤프 (api에 명시된대로)합니다.

+0

감사합니다. 나는 그것을 읽은 것을 기억하지만, 나는 그것을 완전히 이해하지 못했을 것입니다. – Bayless

+0

문제 없습니다. 때로는 나와 함께 일어난다. – Sajan