Rails包括关系模型到模型

时间:2018-06-05 14:46:52

标签: ruby-on-rails ruby activerecord ruby-on-rails-5

class Something
  belongs_to :User
end

class User
  has_many :something
end

我可以调用Something.all并获取对象数组

[#<Something:0x0000558f81437158
  id: "c2c0506e-57db-4d39-8f5b-20fde15aa1a4",
  user_id:"XXX-XXX">]

当我使用Something.includes(:user)时,我得到完全相同的结果。 我的印象是我在某个对象中包含了一些用户对象。 当我使用例如Something.all.as_json(includes: :user)时,我得到一个合并的json哈希。问题是我不想要合并的json哈希。我的模型中某处有什么问题或.includes如何工作?

Usecase将是我的索引操作,它使用json自动响应,我只需要构建正确的对象哈希,而无需在整个地方编写as_json。

任何?

1 个答案:

答案 0 :(得分:0)

将以下gem添加到您的Gemfile

gem 'active_model_serializers'

然后使用bundle

安装它
bundle install

您可以按如下方式生成序列化程序

rails g serializer something
rails g serializer user

它将在

中创建Serializer类文件
# app/serializers/something_serializer.rb

    class SomethingSerializer < ActiveModel::Serializer
       attributes :id, 

       has_many :users 
    end

# app/serializers/user_serializer.rb
   class UserSerializer < ActiveModel::Serializer
       attributes :id, :name
    end 

在控制器中

def index
  @something = Something.includes(:users).all


  render json: @something
end