'유효한'이라는 열이있는 데이터베이스에서 activeRecord를 어떻게 사용하려면 어떻게해야합니까? (DangerousAttributeRor)

StackOverflow https://stackoverflow.com/questions/1510875

문제

변경할 수없는 데이터베이스에 액세스하고 있으며 열이라는 열이 있습니다. 유효한 한정된. 속성에 액세스하려고 할 때 마다이 예외가 발생합니다.

유효한? ActiveRecord (ActivereCord :: DangerousAttributeError)에 의해 정의됩니다.

예외는 의미가 있지만 데이터베이스를 변경할 수 없으므로 어떻게이 오류를 해결할 수 있습니까?

속성을 "재정의"시도했지만 원래 열을 제거하는 방법을 모르겠습니다. 이 valid_column 메소드를 성공적으로 호출 할 수 있지만 데이터베이스에 정의 된 다른 속성에 액세스하려고 할 때마다 동일한 예외가 발생합니다. 여전히 유효한 열을 매핑하려는 것 같습니다.

  def valid_column=(valid)
    write_attribute(:valid, valid)
  end
  def valid_column
      read_attribute(:valid)
  end

그것이 중요한지 확실하지 않지만 여기에 내 환경의 세부 사항이 있습니다.

  • Windows Ruby 1.8.6
  • Linux 서버의 Informix 데이터베이스
  • ActiveRecord (2.3.4)
  • ActiveRecord-Informix-Adapter (1.0.0.9250)
  • Ruby-Informix (0.7.1)

미리 감사드립니다!

도움이 되었습니까?

해결책

이 시도:

class MyTable < AR:Base
   class << self
     def instance_method_already_implemented?(method_name)
       return true if method_name == 'valid'
       super
     end
   end
end

해킹이며 레일 3에서는 작동하지 않을 수도 있지만 지금은 문제를 해결할 수 있습니다.

나는 그것을 발견했다 Ruby on Rails 메일 링리스트

원한다면 볼 수도 있습니다 Datamapper, 이것은 이런 종류의 것들을 다소 더 산만하게 처리합니다.

다른 팁

SAFE_ATTRIBUTES 사용 - https://github.com/bjones/safe_attributes . 상자에서 완벽하게 작동합니다.

class WebsiteUser < ActiveRecord::Base
    establish_connection 'cf_website'
    set_table_name 'nc_users'
    bad_attribute_names :hash    
end

Activerecord의 예약 된 속성에 대해 걱정하지 않고 보석에 보석을 추가하면 보석이 이름 충돌을 자동으로 처리합니다.

gem 'safe_attributes'

http://goo.gl/oo2h7

읽기의 경우 SQL의 select-as 문을 사용할 수 있습니다. 다음이 작동하는지 확실하지 않지만 기본 범위로 인해 쉽게 수행 할 수 있습니다.

class MyRecord < ActiveRecord::Base
    default_scope :select=> 'valid as valid_column'
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top