named_scope에서 "find_by_sql"을 사용하는 방법이 있는지 궁금합니다. 나는 기존의 named_scopes에 연결할 수 있도록 named SQL을 named_scope로 취급하고 싶습니다. 또한 자주 사용하는 SQL 코드 조각을 최적화하는 것이 좋습니다.named_scope에서 SQL 캡슐화
9
A
답변
10
그런 다음 다음 '범위를 find_by_sql
를 호출하는 경우 당신은 당신이 명명 된 범위의 조건에 원하는 SQL을 넣을 수 있지만 '버려져. 을 감안할 때
:
이 작동class Item
# Anything you can put in an sql WHERE you can put here
named_scope :mine, :conditions=>'user_id = 12345 and IS_A_NINJA() = 1'
end
이 (그냥 거기에 SQL 문자열 스틱 - 두 개 이상의들이 합류 얻을 하나있는 경우) 그러나
Item.mine.find :all
=> SELECT * FROM items WHERE ('user_id' = 887 and IS_A_NINJA() = 1)
을,이하지 않습니다
Items.mine.find_by_sql 'select * from items limit 1'
=> select * from items limit 1
그래서 대답은 "아니오"입니다. 당신이 장면 뒤에서 일어날 일에 대해 생각한다면 이것은 많은 의미가 있습니다. SQL 레일을 구축하기 위해서는 함께 사용하는 방법을 알아야합니다.
일반 쿼리를 만들 때 select
, joins
, conditions
등은 모두 별개의 조각으로 나뉩니다. 레일스는 다른 모든 것에 영향을 미치지 않고 조건에 추가 할 수 있음을 알고 있습니다 (즉, with_scope
과 named_scope
의 작동 방식입니다).
그러나 find_by_sql
으로 레일을 크게 줄 수 있습니다. 어디로 가는지 알지 못하기 때문에 범위가 작동하기 위해 추가해야 할 사항을 추가하는 것이 안전하지 않습니다.
0
있는지 왜 안
: named_scope : 조건 => [당신의 SQL]
1
이 질문에 대한 답변은 정확하지 않지만 'contruct_finder_sql'을 조사해보십시오. 그것은 당신이 명명 된 범위의 SQL을 얻을 수 있습니다.
named_scope :mine, :conditions=>'user_id = 12345 and IS_A_NINJA() = 1'
named_scope :additional {
:condtions => mine.send(:construct_finder_sql,{}) + " additional = 'foo'"
}
관련 문제
- 1. 캡슐화 개념
- 2. ActiveCollection 캡슐화
- 3. JavaScript 캡슐화
- 4. 특정 메서드 또는 named_scope에서 실행될 SQL을 가져옵니다.
- 5. 필드를 부분적으로 캡슐화 C#
- 6. 벡터, Size_type 및 캡슐화
- 7. asp.net에서 추상화 및 캡슐화?
- 8. 캡슐화 및 상속 방법
- 9. Boost :: 네트워크를 통한 캡슐화
- 10. 소프트웨어에서 캡슐화 사용 사례
- 11. 컴포지션 클래스의 캡슐화 C++
- 12. 컴포지션과 데이터 캡슐화
- 13. API 캡슐화 옵션
- 14. 클래스에 AppSettings를 캡슐화 하시겠습니까?
- 15. DDD 새는 캡슐화 질문
- 16. 속성 및 캡슐화
- 17. 클래스 정의 내의 캡슐화
- 18. backbone.js :보기 기능 캡슐화?
- 19. 캡슐화 좋은 연습
- 20. 컨테이너 관계 및 캡슐화
- 21. 목표 C 캡슐화
- 22. C++ 캡슐화 기술
- 23. 전용 enum 캡슐화
- 24. 중첩 된 XML 캡슐화
- 25. 서비스 캡슐화 참조
- 26. 성능 : 구조체에 문자열을 캡슐화 하시겠습니까?
- 27. RESTful 레일 및 캡슐화 동작
- 28. 엔티티 프레임 워크 및 캡슐화
- 29. 클래스, 캡슐화 및 사용자 입력
- 30. 클래스에 대한 사용자 입력 캡슐화