14

変更できないデータベースにアクセスしていますが、有効な定義済みという名前の列があります。属性にアクセスしようとすると、次の例外が発生します。

有効?ActiveRecord によって定義されます (ActiveRecord::DangerousAttributeError)

例外は理にかなっていますが、データベースを変更できないため、このエラーを回避するにはどうすればよいですか?

属性を「オーバーライド」しようとしましたが、元の列を削除する方法がわかりません。この valid_column メソッドを正常に呼び出すことはできますが、データベースで定義された別の属性にアクセスしようとすると、同じ例外が発生します。まだ有効な列をマップしようとしているようです。

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

関係あるかわかりませんが、私の環境は以下の通りです。

  • Windows ルビー 1.8.6
  • Linux サーバー上の Informix データベース
  • アクティブレコード (2.3.4)
  • activerecord-informix-adapter (1.0.0.9250)
  • ruby-informix (0.7.1)

前もって感謝します!

4

4 に答える 4

4

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
于 2012-02-02T03:02:49.170 に答える
3

ActiveRecordの予約済み属性を気にせずに、gemfileにgemを追加するだけで、gemが名前の衝突を自動的に処理します。

gem 'safe_attributes'

http://goo.gl/OO2H7

于 2012-12-07T11:05:34.407 に答える
2

読み取りの場合、SQL の select-as ステートメントを使用できる場合があります。以下が機能するかどうかはわかりませんが、デフォルトのスコープにより、これが簡単に実行できるようになる場合があります。

class MyRecord < ActiveRecord::Base
    default_scope :select=> 'valid as valid_column'
end
于 2009-10-02T17:44:16.810 に答える