0

私は奇妙な行動に直面しています。これが私のシナリオです。

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 の必要はなく、正常に動作します。

提案は大歓迎です。

4

1 に答える 1

0

Rails 3.2.12 では正常に動作しますが、Rails 3.2.13 では失敗します。私はこの行動に混乱しています。

于 2013-07-29T11:02:33.090 に答える