簡體   English   中英

has_many 通過活動模型序列化程序 Rails API 中的關系

[英]has_many through relation in active model serializers Rails API

我通過user_projectusersprojects之間建立了多對多的關系。 我知道我可以簡單地在用戶序列化程序中添加has_many :projects (反之亦然在項目序列化程序中)以在用戶內部嵌套項目。

但是我在user_projects表中還有一些額外的字段(例如,用戶參與相應項目的開始和結束日期),我不知道將它們包含在返回的 json 中的正確方法是什么。 我應該為用戶內部返回的項目創建一個特殊的序列化程序,並將start_date作為項目的屬性包含在內,還是有另一種方法可以做到這一點?

最好的方法是在userproject模型之間建立一個'has-many-through' (HMT)關系,並為關系模型創建一個序列化程序。

class UserProjectSerializer < ActiveModel::Serializer
  ...
end

這將通過以下方式在UserSerializer使用:

has_many :users_projects

原因是模型之間的關系包含額外的數據。

要實現 HMT,您需要創建user_projects模型並在相關模型中定義 HMT 關系:

users_project.rb

class UserProjects < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
end

用戶名

class User < ActiveRecord::Base
  has_many: users_projects
  has_many: projects, through: :user_projects
end

項目文件

class Project < ActiveRecord::Base
  has_many: users_projects
  has_many: users, through: :user_projects
end

我以前遇到過類似的問題,我使用了rabl 有一個關於railscasts的很好的教程可以幫助您入門。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM