我正面临一种奇怪的行为。这是我的场景。
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中的记录,但未能触发message_recipient记录。但是,如果我执行上述代码删除acts_as_paranoid gem,那么它工作正常。有什么办法可以解决这个问题吗?
解决方案 1:我们可以在 Message 模型上使用create , 而不是在 Message 模型上调用new。因此将创建记录,然后我可以将数据推送到收件人中。就像创建父记录并使用它的 id 我正在创建子记录一样。所以不需要触发,它工作正常。
欢迎提出建议。