短いバージョン:私は、使用中の従来のRails 2アプリケーションで使用されているデータベースの一部のテーブルを(読み取り専用で)使用する新しいRails 4アプリケーションを構築しています。しかし、(特に新しいアプリケーションの文脈で)古いアプリケーションモデル/テーブルは非常に混乱していましたので、self.table_nameを使用してモデル/テーブルに異なる名前を使用したいと思います。これは多相関係を追加しようとするまで完全に機能します。 Railsは私の定義したtable_nameを無視し、新しいモデル名を使ってその型の問い合わせを行いますが、それはもちろん違いますので動作しません。これを変更する方法はありますか?Rails 4の多型has_manyがtable_nameを無視します
ロングバージョン:あり、この式の3つのモデルがあり、ここで彼らは、次のとおりです。
class Exporter < MysqlBase
has_many :lic_exporter_addresses, :as => :place
self.table_name = 'excons'
self.primary_key = 'id'
end
class LicBusiness < MysqlBase
has_one :physical_address, -> { where(category: 'Physical') }, :class_name => 'LicExporterAddress', :as => :place
has_one :mailing_address, -> { where(category: 'Mailing') }, :class_name => 'LicExporterAddress', :as => :place
has_many :lic_exporter_addresses, :as => :place
self.table_name = 'businesses'
self.primary_key = 'id'
end
class LicExporterAddress < MysqlBase
belongs_to :place, polymorphic: true
self.table_name = 'addresses'
self.primary_key = 'id'
end
私たちは、企業のさまざまな種類のトンを持っているので、ビジネスモデルが最も問題です。私は本当に "ビジネス"が実際に何であるかについて非常に混乱するので、新しいアプリでそれを持っていることを本当に望んでいない。現在のコードでは、私はレールコンソールにアクセスし、LicBusinessや輸出業者のためのlic_exporter_addressesを取得しようとすると、それはありません:
SELECT `addresses`.* FROM `addresses` WHERE `addresses`.`place_id` = '00044c693f6848f9b0978f873cf9999a' AND `addresses`.`place_type` = 'LicBusiness'
私は必要なのplace_type =「ビジネス」です。
Railsにどのようなplace_typeを探すかを教える方法はありますか?私はこれを見たquestionと二番目の答えは、私はすでにそれが両方のオプションで同時に動作する方法を把握することはできませんので、物理アドレスと郵送のアドレスでそれをやっていることを除いて有望見えた...ありがとう任意の情報やアイデアのために。
ありがとうございました。これは厳密には読み取り専用です(他のアプリケーションはこのデータの実際の管理を行う必要があります)ので、place_typeが新しいエントリに正しく入力されることに心配していません。 physical_addressとmailing_addressについても同様に機能しました。 {category: 'Physical'、place_type: "Business"}}、:class_name => 'LicExporterAddress'、foreign_key: "place_id" has_one:physical_address、 – Maltiriel