代码之家  ›  专栏  ›  技术社区  ›  Denny Mueller

rails将关系模型包含到模型中

  •  0
  • Denny Mueller  · 技术社区  · 6 年前
    class Something
      belongs_to :User
    end
    
    class User
      has_many :something
    end
    

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

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

    当我使用 Something.includes(:user) 我得到了完全相同的结果。 我的印象是我的something对象中包含了一些用户对象。 当我举个例子 Something.all.as_json(includes: :user) 我得到一个合并的json散列。问题是我不想要合并的json散列。我的模特儿有什么毛病吗 .includes 工作?

    usecase是我的索引操作,它用json自动响应,我只需要构建正确的对象散列,而不需要到处用json编写。

    有人吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   praga2050    6 年前

    将以下gem添加到gemfile中

    gem 'active_model_serializers'
    

    然后使用bundle安装

    bundle install
    

    您可以生成序列化程序,如下所示

    rails g serializer something
    rails g serializer user
    

    它将在

    # 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