在Mailboxer gem中扩展Conversation模型

时间:2014-07-09 12:06:02

标签: ruby-on-rails ruby ruby-on-rails-4 mailboxer

我想扩展Conversation模型,以便我可以使用它的关联。我是通过创建一个名为' conversation.rb'的文件来完成的。在app / models目录中这样:

Mailboxer::Conversation.class_eval do
  belongs_to :device, class_name: "Device", foreign_key: 'device_id'
end

我还添加了一个名为' device_id'的列。在对话表中。

但是当我尝试时:

Conversation.last.device

它说:

NoMethodError: undefined method `device' for #<Mailboxer::Conversation:0x007fe83e6ae7c0>

2 个答案:

答案 0 :(得分:3)

问题是如果app/models/conversation.rb被调用,Mailboxer::Conversation将无法加载。通过将代码移动到config/initializers/mailboxer.rb,我为我工作了。另外,我将代码包装在Rails.application.config.to_prepare中,因为在开发模式下,此代码必须在重新加载时重新执行(参见Monkey patching Devise (or any Rails gem)):

Mailboxer.setup do |config|
  [...]
end

Rails.application.config.to_prepare do
  Mailboxer::Conversation.class_eval do
    belongs_to :device
  end
end

这样,current_user.mailbox.conversations.first.device之类的东西应该是可能的。

答案 1 :(得分:1)

您可以尝试从中继承

class Conversation < Mailboxer::Conversation
  belongs_to :device, class_name: "Device", foreign_key: 'device_id'
end