この質問は 1 年以上前のものですが、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
次に、アソシエーションにアクセスする必要があるコード内の任意の場所で、最初にメールボックスの gem から提供される API を介してメールボックスの会話オブジェクトを取得し、次に 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