2

Rails 以外の従来の命名法を持つレガシー システムを扱う。すべてのテーブルと属性は大文字であることに注意してください。これは、sqlserver-adapterIDでは と同じではないことを意味しidます。

クエリalias_attribute :new, :OLDで使用できる名前を指定できると思っていました。ActiveRecord/ActiveRelation私が以下に見ているもの( でテスト済みrails console)から、そうではありません。

ID最終的な目標は、各モデルに属性などを持たせることにより、Rails の従来の方法論でレガシー システムを「動作」させることです。

モデル定義:

# app/models/organization.rb
class Organization < ActiveRecord::Base
  self.table_name = "ORGANIZATION"
  self.primary_key = "ORGANIZATION_ID"

  alias_attribute :id, :ORGANIZATION_ID
end

動作しません:

Organization.select(:id)=>invalid column name 'id'

Organization.select(:ID)=>invalid column name 'ID'

Organization.select("ID")=>invalid column name 'ID'

動作します:

Organization.select(:organization_id)=><finds record>

Organization.select(:ORGANIZATION_ID)=><finds record>

Organization.select("organization_id")=><finds record>

Organization.select("ORGANIZATION_ID")=><finds record>

4

2 に答える 2

0

スキーマをすべて小文字として扱うように DB アダプター (MS SQL Server) を構成することで、この状況を解決しました。したがって、実際の DB テーブル名は「USERS」、「PEOPLE」などですが、アプリケーションでは「users」、「people」として参照できます。

参照: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter#force-schema-to-lowercase

これを解決するために追加したコードは次のとおりです。

# config/initializers/sql_server_adapter.rb
ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true
于 2014-10-28T13:20:24.793 に答える
0

先日、alias_attribute を使用しました。正直なところ、私は自分の仕事ができるようになるまでそれをつつき続けました。

alias_attribute に渡されたパラメーターを逆にすることで、探している機能を実現できました。

例:

alias_attribute :active?, :active
alias_attribute :alert, :message
alias_attribute :delete_at, :expire_at

最初のパラメーターは列名で、2 番目のパラメーターは別名です。ドキュメントとは逆のように見えることは理解していますが、これが私がこれを機能させる方法です。

于 2014-09-25T19:55:41.447 に答える