1

現在、プロジェクトでMailboxerを使用していますが、問題なく動作しています。

に追加RequestsConversationsます。基本的に、アイデアは追加することです

has_one :request, :foreign_key => 'request_id'

conversation.rbしかし、それは宝石に属しているためアクセスできません。

gem のカスタマイズについて読んだことがありますが (ここここ)、提供されているソリューションは適切ではないようです。

私たちが望むものを達成するための最良の方法は何でしょうか?

していい:

  • 宝石モデルを編集可能なカスタムモデルに拡張しますか?
  • conversation.rb を編集する「クリーンな」方法がありますか?

ありがとう

4

2 に答える 2

3

この質問は 1 年以上前のものですが、Rails 4 環境で発生した同様の問題に対する解決策を共有したいと思いました。

基本的に:

  1. モデルを継承する新しい子モデルを作成Mailboxer::Conversationする
  2. 関連付けを新しい子モデルに追加します。
  3. 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
于 2014-09-17T09:15:37.470 に答える