1

次の 2 つのモデルがあるとします。

class Conversation < ActiveRecord::Base
  has_many :messages, :class_name => 'Message', inverse_of: 'conversation'

  class Entity < Grape::Entity
    expose :id, :title
    expose :messages, :using => 'Message::Entity'
  end
end

class Message < ActiveRecord::Base
  belongs_to :conversation, :class_name => 'Conversation', inverse_of: 'messages'

  class Entity < Grape::Entity
    expose :id, :content
    expose :conversation, :using => 'Conversation::Entity'
  end
end

関連付けを含む json としてエンティティを提示する必要があるため、次のようになります。

これはうまくいきます:

get do
  @c = Conversation.find(1)
  present @c, with: Conversation::Entity
end

これはそうではありませんが:

get do
  @m = Message.find(1)
  present @m, with: Message::Entity
end

それは私にnullを与えますconversation:

{"id":1,"content":"#1 Lorem ipsum dolor sit amet","conversation":null}

そのため、begs_to 関連付けでは機能していないようです。

それを機能させるために私は何をする必要がありますか?

4

1 に答える 1

0

次のように明示的belongs_toに言及する必要がある場合:foreign_key

class Message < ActiveRecord::Base
  belongs_to :conversation, :class_name => 'Conversation', inverse_of: 'messages', foreign_key: :conversation_id

  class Entity < Grape::Entity
    expose :id, :content
    expose :conversation, :using => 'Conversation::Entity'
  end
end
于 2015-03-12T18:06:36.190 に答える