我面临着一种奇怪的行为。这是我的场景。
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_paranoidgem,那么它就可以正常工作。有什么办法可以解决这个问题吗?
解决方案1:我们可以在消息模型上使用create,而不是在消息模型中调用new。因此,记录将被创建,然后我可以将数据推送到收件人内部。这就像创建父记录,并使用其id创建子记录。所以没有必要触发,而且效果很好。
欢迎提出建议
它与轨道3.2.12配合良好,但与轨道3.2.13配合失败。我对这种行为感到困惑。