2009-08-05 2 views

답변

20

면책 조항 : 본인은 속편 관리자입니다.

Rails를 사용할 때 Sequel은 ActiveRecord의 측면 또는 대신에 사용하기 쉽습니다. 수동으로 데이터베이스 연결을 설정해야하지만, 그 이외의 사용법은 비슷합니다.Sequel 모델 파일은 앱/모델에 저장되며 ActiveRecord 모델과 유사하게 작동합니다.

데이터베이스 연결을 설정하는 것은 지루한 일이 아니며 일반적으로 속행을 요구하는 environment.rb의 한 줄이고 각 환경 파일 (development.rb, test.rb, production.rb)의 줄은 다음과 같습니다. : 당신이 지루한 설정 코드의 4 개 라인을 고려하는 경우

DB = Sequel.connect (...)는 그래서 그것은 단지 지루한입니다.

여러 데이터베이스를 대상으로 지정하지 않으면 원시 SQL을 사용하는 것이 일반적으로 문제가되지 않습니다. 이를 피하는 주된 이유는 늘어난 자세한 정보입니다. Sequel은 적어도 ActiveRecord만큼 쉽게 원시 SQL을 사용하여 지원하지만, 원시 SQL을 사용해야하는 시간은 일반적으로 Sequel에서 매우 드뭅니다.

현재, Sequel에는 여러 유효성 검사 플러그인이 포함되어 있습니다. validation_class_methods 플러그인은 클래스 메소드를 사용하여 ActiveRecord 유효성 검사와 유사합니다. validation_helpers 플러그인은 인스턴스 레벨 메소드를 사용하여 더 간단한 구현을 갖지만, 둘 다 대략 동일한 작업을 수행 할 수 있습니다.

마지막으로 원하는 기능을 수행하는 ActiveRecord 코드가 있다면 기능을 추가 할 계획이 아니라면 Sequel로 코드를 이식 할 필요가 없을 것입니다.

+0

나는 반대로 후편으로 건너 가지 않았 으면 좋겠어. btw : 실제로 레일즈 밖에서 내가 선호하는 옵션이야. 두 개의 라이브러리를 함께 사용하면 SQL이 복잡해질 때조차도 약간의 플랫폼 독립성을 얻는 데 많은 이점을 얻지 못합니다. 나는 그것이 과잉이라고 생각한다. 특히 개발자가 이미 쓰고 싶은 것을 알고 있다면 더욱 그렇다. 이러한 맞춤형 SQL을 재 작업하는 것이 MySQL에서 Oracle로 포팅해야 할 때 가장 큰 데이터베이스 관련 문제는 아니 었습니다! –

+0

활성 레코드 연결에서 후속 db 객체를 가져 오는 방법에 관한 해킹 팁이 있습니까? – fotanus

3

개인적으로는하지 않겠습니다. 손으로 직접 연결을 관리하는 것은 처음부터 지루할 것입니다. Yehuda와 공동 작업을하는 경우 ORM을 쉽게 전환해야하는 Rails 3.0 (또는 Edge Rails에 대한 개발을 시작하기 시작)을 연기하기 위해 Sequel이 더 강력한 옵션이라고 느낀다면 더 많은 경향이 있습니다. . 지금보다 훨씬 Merb-like. '

그러나 ISN :

은 DHH의 주제에 걸릴 (나는이 말의 입에서, 말하자면, 복음의 진리를 마음으로 촬영하지만이되어야 말하는 게 아니에요)이었다 t SQL 더티? 프로그래머가 관계형 데이터베이스의 상단 에 계층 객체 지향 시스템 시작 이래

, 그들은 는 깊은 추상화를 실행하는 방법에 대한 질문과 싸워 왔어. 일부 객체 관계형 매퍼는 을 사용하여 객체 지향 순도를 위해 을 완전히 없애고 다른 OO 레이어를 통해 모든 쿼리를 강제 실행합니다.

활성 레코드가 없습니다. SQL이 이거나 더럽지도 좋지도 않다는 가정하에 을 작성했습니다. 사소한 경우에만 자세히 표시됩니다. 중점을 두어 번거러움을 다루지 않아도되지만 하드 쿼리에 대한 표현력을 유지합니다. SQL 형식은 으로 우아하게 처리되었습니다.

따라서, 당신은 find_by_sql를 사용할 때() 중 성능 병목 또는 하드 쿼리를 처리 할 수 ​​ 죄책감을 느끼지는 안된다. 생산성 및 즐거움을 위해 객체 지향 인터페이스를 사용하고 해야 할 때 근접 금속 경험을 위해 표면 아래에 딥을 시작합니다.

(견적은 here을 발견, 원문은 AWDRWR은 "해먹"책의 P334에있다).

나는 그것이 합리적이라고 생각합니다.

우리는 find_by_sql이 처리 할 수없는 것에 대해 이야기하고 있습니까? 아니면 execute이 처리 할 수없는 복잡한 비 SELECT 항목에 대해 이야기하고 있습니까?

예제는 무엇입니까?

+0

내가 찾고있는 모든 것들을 find_by_sql과 sanitize_sql_array가 처리 할 수 ​​있습니다. 나는 하드 코드 된 SQL을 사용하는 것이 조금 불편하다. 매우 강한 SQL 개발자이기 때문에 정말 이상하다. 나는 속편이 보여줄 것처럼 보이는 LINQ 자질을 좋아합니다. 하지만 당신이 옳을 수도 있습니다, 아마도 난 단지 레일 애플 리케이션에 SQL 성능이 중요 때 점점 더 받아 들여야 배울해야합니다. –

+0

이것은 흥미로운 대답이었습니다. 나는 옵션을 찾고 있었고이 대화는 유용했습니다. – uadrive

+0

자, Sequel을 사용하면 자신의 SQL 문을 자유롭게 제작할 수 있습니다. SQL이 더럽거나 나쁘다는 개념에 기반하지 않았습니다. 이 경우 모듈화가 더 유용하기 때문에이 도구를 사용하면 부분적으로 직접 작성하고 강력한 도구로 부분적으로 작성한 쿼리를보다 쉽게 ​​작성할 수 있습니다. –

관련 문제