문제

Im 작업에서 유산을 oracle 데이터베이스로 약간 이상한 테이블 이름 지정 규칙의 각 열 이름 앞에는 테이블 처음-예를 들어 정책입니다.poli_id.

이 데이터베이스 작업에 쉽게 저는 방법 set_column_prefix 을 만들에 대한 접근 각각의 열두 제거합니다.ie:

# Taken from wiki.rubyonrails.org/rails/pages/howtouselegacyschemas
class << ActiveRecord::Base
  def set_column_prefix(prefix)
    column_names.each do |name|
      next if name == primary_key

      if name[/#{prefix}(.*)/e]
        a = $1

        define_method(a.to_sym) do
          read_attribute(name)
        end

        define_method("#{a}=".to_sym) do |value|
          write_attribute(name, value)
        end

        define_method("#{a}?".to_sym) do
          self.send("#{name}?".to_sym)
        end

      end
    end
  end
end

이 파일에(insoft.rb)에서 내 lib/디렉토리에서 필요한에서 내 config/환경입니다.rb 후 레일::이니셜라이저입니다.실행 블록입니다.

이에서 잘 작동하는 개발,하지만을 실행하려고 할 때 응용 프로그램 생산에서 모드는 다음에 오류가 나의 모든 모델:

dgs@dgs-laptop:~/code/voyager$ RAILS_ENV=production script/server 
=> Booting Mongrel
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:1964:in `method_missing': 
undefined method `set_column_prefix' for #<Class:0xb3fb81d8> (NoMethodError)
    from /home/dgs/code/voyager/app/models/agent.rb:16

이 오류에 의해 트리거'config.cache_classes=true'선 config/환경/생산입니다.rb.면 이 설정 false, 다음 레일이 시작됩니다,그러나지 않을 것 캐시됩니다.나는 이 레일 캐시 모든 모델을 실행하기 전에 이니셜라이저의 블록

이동하는 경우에는'요구"insoft.rb'"을 시작하기 전에 레일::이니셜라이저입니다.실행 블록,다음 내가 오류가 발생하기 때문에 ActiveRecord 되지 않은 아직 초기화:

usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:443:in `load_missing_constant': uninitialized constant ActiveRecord (NameError)
    from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:80:in `const_missing'
    from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:92:in `const_missing'
    from /home/dgs/code/voyager/lib/insoft.rb:1

다는 것을 포함한 이용자 지정 lib set_column_prefix 방법을하기 위해서 선택하기 전에 모델을 캐시되지만,모든 activerecord 파일이 로드되어 있습니까?

환호

Dave Smylie

도움이 되었습니까?

해결책

다는 것을 포함한 이용자 지정 lib set_column_prefix 방법을하기 위해서 선택하기 전에 모델을 캐시되지만,모든 activerecord 파일이 로드되어 있습니까?

도 설정 이니셜라이저.당신은 그것을 호출 할 수 있습니다 config/이니셜라이저/insoft.rb 와의 내용을 원숭이가 패치:

class << ActiveRecord::Base
  def set_column_prefix(prefix)
    column_names.each do |name|
      next if name == primary_key

      if name[/#{prefix}(.*)/e]
        a = $1

        define_method(a.to_sym) do
          read_attribute(name)
        end

        define_method("#{a}=".to_sym) do |value|
          write_attribute(name, value)
        end

        define_method("#{a}?".to_sym) do
          self.send("#{name}?".to_sym)
        end

      end
    end
  end
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top