3

我有usersprojectsuser_project之间的多对多关系。我知道我可以简单地在User Serializer中添加has_many :projects(反之亦然,在项目序列化器中)以在用户中嵌套项目。has_many通过关系在主动模型串行器Rails API

但我在user_projects表中还有一些附加字段(例如用户参与相应项目的开始和结束日期),我不知道将它们包含在返回的json中的正确方法是什么。我应该为在用户中返回的项目创建一个特殊的序列化程序,其中包含start_date作为项目的属性,还有另一种方法可以做到这一点?

回答

0

我以前有类似的问题,我使用rablrailscasts有一个很好的教程,可以帮助您入门。

1

要做到这一点是建立在userproject模型之间的'has-many-through'(HMT)的关系,并创建关系的模型串行的最好方法。

has_many :users_projects 

其原因是,这些模型之间的关系中包含的附加数据:

class UserProjectSerializer < ActiveModel::Serializer 
    ... 
end 

这将随后在UserSerializer经由使用。

为了实现HMT,你需要创建user_projects模型和定义在相关车型的HMT关系:

users_project.rb

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

user.rb

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

project.rb

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