[英]has_many through relation in active model serializers Rails API
我通過user_project
在users
和projects
之間建立了多對多的關系。 我知道我可以簡單地在用戶序列化程序中添加has_many :projects
(反之亦然在項目序列化程序中)以在用戶內部嵌套項目。
但是我在user_projects
表中還有一些額外的字段(例如,用戶參與相應項目的開始和結束日期),我不知道將它們包含在返回的 json 中的正確方法是什么。 我應該為用戶內部返回的項目創建一個特殊的序列化程序,並將start_date
作為項目的屬性包含在內,還是有另一種方法可以做到這一點?
最好的方法是在user
和project
模型之間建立一個'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.