2011-09-09 2 views
2

Rails 3.1 로의 업그레이드를 준비하기 위해 MetaWhere에서 Squeel로 마이그레이션하려는 어플리케이션이 있습니다.MetaWhere에서 마이그레이션하여 심볼을 사용하지 말자.

이 과정은 대부분 간단한 과정 이었지만 문제가되는 경우가 하나 있습니다. 문제는 필드와 값을 변수로 지정했기 때문입니다. 내 MetaWhere 쿼리에서 필드 이름의 기호를 간단하게 만들고 쿼리에서 사용하지만 Squeel은 기호를 사용하지 않고 대신 instance_eval을 사용하므로 유사한 쿼리를 만드는 방법을 찾을 수 없습니다.

원래 쿼리의 그림이 될 수 :

Article.where("#{field_name}".to_sym.matches => '%' + field_value + '%') 

가 어떻게 Squeel에서 비슷한 쿼리를 만들려면 어떻게해야합니까?

레거시 심볼 기능을 사용하겠다고 지정할 수 있지만 새로운 구문으로 완전히 변환하겠다는 것을 알고 있습니다.

+0

해결책을 찾았습니까? 나는 또한 그것을하는 방법 호기심이다. – tokland

답변

1

이 작동 :

Article.where{article.send(field_name) =~ '%' + field_value + '%'} 

테이블 이름 인 소문자 '기사'.

+0

브릴리언트. 그것은 괄호 대신에 중괄호를 필요로하지만 그것이 나를 위해 작동한다는 것 이외에. 이제 그 추악한 SQL 코드 일부를 제거 할 수 있습니다 :-) – HakonB

+0

우수! 나는 괄호를 중괄호로 바꿨다. :-) –

+0

"기사"가 무엇인지 분명하지 않습니다. 확장 할 수 있습니까? "테이블 이름"은 나에게 의미가 없습니다. – tokland