Rails 3.2 アプリを Rails 4 にアップグレードしましたが、いくつかの問題があります。モデル Account と AccountSettings があります。
class Account < ActiveRecord::Base
# ...
after_commit :create_default_settings, on: :create
# associations
has_one :feature_flags, class_name: "FeatureFlag"
has_one :qb_settings, class_name: "QbSetting"
has_one :settings, class_name: "AccountSetting"
has_one :pos_settings, class_name: "PosSetting"
# ...
def create_default_settings
self.create_settings
self.create_feature_flags(qb_enabled: false, qb_online_enabled: false)
self.create_default_taxes
self.create_qb_settings(tz: self.tz)
self.create_pos_settings(default_tax_id: SalesTax.where(account_id: self.id).first.id)
self.qb_settings.set_qb_sync_attributes_with_date(Time.zone.now)
end
def create_default_taxes
sales_tax = SalesTax.create!(name: "State", description: "State Tax", tax_rate: 0.085, tax_agency: "Franchise Tax Board", account_id: self.id)
end
# ...
end
class PosSetting < ActiveRecord::Base
# ...
belongs_to :account
belongs_to :default_tax, class_name: "SalesTax"
belongs_to :default_term_code, class_name: "TermCode"
belongs_to :default_sales_rep, class_name: 'User'
belongs_to :payment_gateway
def is_metric?
measurement_system == 'metric'
end
enumerize :measurement_system, in: %w(english metric), default: 'english'
enumerize :accounting_method, in: %w(accrual cash), default: 'cash'
end
アカウントを作ったところ
account = Account.create!(name: 'テスト アカウント', ...)
前にRails 3でやったように。AccountSetting (行: self.create_settings) に account_id がないとエラーが発生しました。だから私はすべての行を変更する必要があります
self.create_settings
に
self.build_settings.save
. また、account.settings を使用できるたびにアカウントをリロードする必要があるのは、アカウントをリロードしないと、account_id のない account.settings があるためです。どこに問題があるのか わかりません。テスト環境のFactoryGirlにも同じ問題があります。すべての関連付け (feature_flags、qb_settings、...) で同じ問題です。