这个问题已经有一年多了,但我想我会分享我在 Rails 4 环境中遇到的类似问题的解决方案。
本质上:
- 创建一个继承自模型的新子
Mailboxer::Conversation
模型
- 将关联添加到新的子模型。
becomes
创建关联时使用方法
为了说明,这是我的新模型文件,称为AppConversation
从Mailboxer::Conversation
类继承:
class AppConversation < Mailboxer::Conversation
has_one :request, inverse_of: :app_conversation
end
Request
模型类中对应的关联:
class Request < ActiveRecord::Base
belongs_to :app_conversation, inverse_of: :request
end
然后,在我需要访问关联的代码中,我首先通过mailboxer gem 提供的API 获取mailboxer 的对话对象,然后使用ActiveRecordbecomes
方法创建/修改/读取关联。例如:
def some_controller_action
# get a mailboxer conversation
@conversation = current_user.mailbox.conversations.find(params[:id])
# get the request object associated to the conversation
@request = @conversation.becomes(AppConversation).request
# create a new request association
new_request = Request.new
@conversation.becomes(AppConversation).request = new_request
end