私は奇妙な行動に直面しています。これが私のシナリオです。
class Message < ActiveRecord::Base
belongs_to :user, :foreign_key => "from_user_id"
has_many :message_recipients, :include => [:user], :dependent => :destroy
has_many :recipients, :through => :message_recipients, :source => :user
end
class MessageRecipient < ActiveRecord::Base
belongs_to :user
belongs_to :message, :include => :message_recipients
end
class User < ActiveRecord::Base
acts_as_paranoid
has_many :message_recipients
end
私は新しいメッセージを作成し、その受信者に価値を押し付けています.
@message=Message.new(:body => "Hi",:from_user_id => session[:user])
@message.recipients.push(User.find(params[:message_recipient_id]))
@message.save
上記の操作により、レコードはメッセージに正しく保存されますが、message_recipient レコードのトリガーに失敗します。しかし、 acts_as_paranoid gem を削除して上記のコードを実行すると、正常に動作します。この問題を解決するための回避策はありますか?
解決策 1: Message モデルでnew を呼び出す代わりに、 Message モデルでcreateを使用できます。したがって、レコードが作成され、受信者内にデータをプッシュできます。親レコードを作成し、そのIDを使用して子レコードを作成するのと同じです。したがって、trigerring の必要はなく、正常に動作します。
提案は大歓迎です。