I가 다음과 같은 모델 객체 : Issue.owner = [array]
라는 이름의 범위 구문
나는 이와 같은 범위가 특정 정수의 배열을 검색 범위, 만들려고 해요 :이
scope :tagged_in_issue, where("issues.owner.include?(1)", true)
을 내가 잘못 갔어?
I가 다음과 같은 모델 객체 : Issue.owner = [array]
라는 이름의 범위 구문
나는 이와 같은 범위가 특정 정수의 배열을 검색 범위, 만들려고 해요 :이
scope :tagged_in_issue, where("issues.owner.include?(1)", true)
을 내가 잘못 갔어?
는이 같은 방법을 추가 할 수 있습니다 : 지금까지
class Issue < AR::Base
def tagged_in_issue?(n)
owner.include?(n)
end
end
@issue.tagged_in_issue(1)
#=> true
@issue.tagged_in_issue(2)
#=> false
UPD
을 내 접근 방식은 당신이 필요로하는 것이 아닙니다 scope
을 필요로한다. 그래서 당신은 당신이 SQL을 통해 그것을하고 싶은 경우 (루비 방법)
class Issue < AR::Base
def self.tagged_in_issue(n)
all.select{|a| a.owner.include?(n)}
end
end
Issue.tagged_in_issue(1)
#=> Array of issues
이런 식으로 할 수있는, 그래서 당신은 속성이 무엇인지 owner
설명해야하고 어디는
Ruby가 SQL을 필요로하는 곳에서는 Ruby를 사용할 수 없습니다. where
절에 대한 매개 변수는 리터럴 문자열, 자리 표시자가있는 배열 또는 열 값 쌍이있는 해시와 같은 SQL에서 사용할 수있는 것이어야합니다.
당신이해야 할 일은 쿼리를 SQL WHERE
절로 다시 사용하는 것입니다.
잘 난 곤경에 처해있다. 하하. 어떻게 정수 1에 대한 SQL 배열을 검색합니까? –
배열이란 무엇입니까? SQL에는 실제로 이러한 것이 없습니다. 결과 집합을 가지고 있습니다. 어쩌면 당신이 원하는 것은'issues.where (: owner_id => 1)'입니다 만,'serialize' 컬럼은 SQL이 이해할 수없는 형식으로 저장되어 있기 때문에 이것을 사용하면 작동하지 않을 것입니다. – tadman
당신이 소유자 필드를 원하십니까 저장 않는다 어디에서나 "1"을 가졌거나 단지 "1"일까요? 소유자가 Ruby 관련 필드 (owner_id) 또는 단순한 정수 필드 (owner)입니까? 범위 : tagged_in_issue, 여기 ("issues.owner =?", 1) –
"Cross Model Scopes"섹션을 참조하십시오. http://edgerails.info/articles/what-s-new-in-edge- rails/2010/02/23/the-skinny-on-scopes-formerly-named-scope/index.html을 참조하십시오. 당신이 정말로하고 싶은 것은 그 같은 JOIN을 만드는 것입니다. – scragz
이 범위는 무엇에 정의되어 있습니까? 문제 표의 소유자 열에있는 값 중 하나가 어떻게 생깁니 까? 정수의 직렬화 된 루비 배열 인 경우 특정 쿼리가 필요합니다. 그 사이에 조인 모델이 있다면 다른 쿼리가 필요합니다. –