Rails活动模型序列化程序 - 属性别名

时间:2017-11-08 05:54:51

标签: ruby-on-rails angular active-model-serializers

我正在将Angular 2应用程序与Rails 5.1 API后端集成。

我的Angular模型中有一个Comment模型,其中包含messagedate属性。但是在我的Comment的Rails模型中,以及message属性我created_atupdated_at属性由ActiveRecord::Migration通过t.timestamps自动提供。

我使用ActiveModel::Serializer更好地控制API响应,而在comment_serializer我希望在API响应中包含date代替created_at GET /commentsGET /comments/:id等中的每条评论都不需要更改Angular模型 - 假设这是正确的方法,我该怎么做呢?

另外,当我从Angular客户端添加评论时,我希望date模型中的Comment属性映射到相应created_at中的Comment Rails中的模型 - 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

  
      
  1. 我想在每个评论的API响应中包含日期代替created_at
  2.   

要实现此目的,您必须在Serializer中定义自定义属性。喜欢这个

class CommentSerializer < ActiveModel::Serializer
  attributes :id, :message, :date

  def date
    object.created_at
  end
end
  
      
  1. 我希望Comment模型中的date属性映射到created_at
  2.   

要实现此目的,您只需在创建评论时手动更新created_at字段。像这样的东西

class CommentController < ApplicationController
    def create
    @comment = Comment.new(comment_params)
    @comment.created_at = params[:comment][:date]

    if @comment.save
        render :something
    else
        render :something
    end

  end

  private

  def comment_params
    params.require(:comment).permit(:message, :next_field, :etc)
  end
end

希望这有帮助。

答案 1 :(得分:2)

我认为您在序列化程序中需要此行吗?

attribute :created_at, key: :date

希望它可以帮助某人。