원시 데이터를 가져와야하는 많은 레거시 데이터베이스가 있습니다. 데이터베이스의 각 테이블에는 임의의 이름과 임의의 필드 콜렉션이 있습니다. 나는 다음과 같은 클래스와이 분야에 대한 액세스를 받고있다을 : 나는 테이블의 이름을 알고 내 코드에있는 지점에 도달 할 때레거시 테이블에서 ActiveRecord 클래스 사용
class Frt < ActiveRecord::Base
establish_connection :legacy
set_primary_key "point"
end
, 내가 호출 할 수
이Frt.set_table_name "table"
t = Frt.find_by_sql("blah")
something = t.field_name + t.other_field_name
etc...
문제가 있다는 것입니다 나는 이것이 내가 먼저 선택한 테이블에 접근 가능한 필드 이름을 잠그는 것을 깨달았다. `set_table_name '메소드에 대한 다른 호출로 테이블을 변경하려고하면 클래스의 속성이 변경되지만 새로운 인스턴스는 여전히 첫 번째 인스턴스와 동일한 필드 세트를 갖습니다. 지금까지, 내 애플 리케이션에서, 나는 다른 것을 필요로하지 않았지만, 내가 길 아래로 엉덩이에 나를 물 것입니다 방법으로 프로그램을 확장거야.
ActiveRecord가 마법을 다시 수행하기를 기대하면서`Frt.send : set_table_name "new_table"을 시도했습니다. 그렇지 않습니다.
누구나 ActiveRecord의 편리 성을 유지하는 방법을 제안 할 수 있지만로드해야하는 테이블의 필드를 동적으로 다시 매핑 할 수 있습니까?
나머지 코드는 게시 할 수 있습니까? 어디서 ActiveRecord obj를 만드나요? – sethvargo
위의 내용이 아닌가요? 't = Frt.find_by_sql ("blah")' –