0

ActiveRecord の concat メソッドを使用してオブジェクトを別のオブジェクトの has_many 関係に追加する移行があります。移行を作成してから、検証を含む新しい属性を親モデルに追加しました。

残念ながら、concat が親オブジェクトを保存しようとするため、以前の移行は失敗し、検証では関連付けられた属性が見つかりません (まだ存在しません)。データ移行を正しく行っていませんか?

移行は次のとおりです。

class RemoveTransportKeyFromInvites < ActiveRecord::Migration
  def up
    Invite.find_each do |invite|
      transport_key = Invite.where(id: invite.id).pluck(:transport_key).first
      guest_user = GuestUser.first_or_create!(transport_key: transport_key)
      guest_user.invites << invite
    end
    remove_column :invites, :transport_key
  end

  def down
    add_column :invites, :transport_key, :string
  end
end

そしてモデル:

class Invite < ActiveRecord::Base
  # some code omitted
  validates_presence_of :inviter_email
  # rest of code omitted

このエラーの原因:

undefined method `inviter_email' for #<InviteToMeal:0x007f8ece07c060>

ありがとう、どんな助けでも大歓迎です!

4

1 に答える 1

1

既定の方法は、移行で「スタブ」モデルを定義して、実際のモデル (検証あり) が読み込まれないようにすることです。 find_each他の ActiveRecord 呼び出しは引き続き機能します。

class RemoveTransportKeyFromInvites < ActiveRecord::Migration
  class Invite < ActiveRecord::Base; end

  def up
    # etc..

詳細については、このガイドを参照してください。

于 2013-04-11T15:13:28.783 に答える