has_many通过关系在活动模型序列化程序Rails API

时间:2016-03-15 15:16:22

标签: ruby-on-rails ruby json serialization active-model-serializers

我在usersprojectsuser_project之间有很多关系。我知道我可以在User Serializer中添加has_many :projects(在项目序列化器中反之亦然),以便在用户内嵌套项目。

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

2 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是在JFrame#pack'has-many-through'模型之间建立user(HMT)关系,并为关系模型创建序列化程序。< / p>

project

然后将在class UserProjectSerializer < ActiveModel::Serializer ... end via:

中使用
UserSerializer

原因是模型之间的关系包含额外的数据。

要实施HMT,您需要创建has_many :users_projects 模型并在相关模型中定义HMT关系:

users_project.rb

user_projects

user.rb

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

project.rb

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

答案 1 :(得分:0)

之前我遇到过类似的问题而且我使用了rabl。有一个很好的railscasts教程可以帮助您入门。