您好我已经为我的Rails应用程序创建了一个基本的REST控制器,我很难让我的ActiveRecord模型加入请求。
我的目标是完成这样的事情:
要求:GET /约会 响应:
[
{
"id":1,
"customer_id":3,
"customer":{
"name":"John Doe"
},
"date":"2011-11-11T00:00:00.000Z",
"created_at":null,
"updated_at":null,
"employee_id":1,
"employee":{
"name":"Jane Doe"
}
}
]
但我刚刚得到这个:
[
{
"id":1,
"customer_id":3,
"date":"2011-11-11T00:00:00.000Z",
"created_at":null,
"updated_at":null,
"employee_id":1
}
]
这是我的基本REST控制器:http://pastebin.com/gQqBNeCH 如果你愿意,你可以阅读整个内容,否则你只需阅读我关注的代码:
def index
@objects = get_class().all
@objects.each do |x|
x.get_relations
end
render json: @objects
end
这是我的约会模式
class Appointment < ActiveRecord::Base
belongs_to :customer
belongs_to :employee
attr_accessor :customer
validates :customer_id, presence: true, :numericality => {
:only_integer => true,
:allow_blank => false,
:greater_than => 0
}
validates :employee_id, :numericality => {
:only_integer => true,
:allow_blank => false,
:greater_than => 0
}
validates :date, presence: true
def get_relations
@customer = Customer.find(self.customer_id)
end
end
我原来的方法就是使用像这样的成员变量:
def get_relations
@customer = Customer.find(self.customer_id)
end
然而,看起来ActiveRecord有一些与render一起运行的序列化器方法。有关如何将belongs_to关系附加到该对象的任何建议吗?
答案 0 :(得分:2)
如果要更改AR将对象渲染为json的方式,可以覆盖模型中的as_json
方法(http://apidock.com/rails/ActiveModel/Serializers/JSON/as_json)。但这意味着将演示文稿信息放在您的模型中,而我并不是它的忠实粉丝。
您还可以在to_json
来电中加入关系:
render :json => @objects.to_json(:include => :relation)
答案 1 :(得分:0)
您必须明确地将其包含在您的json响应中
def index
@objects = get_class().all
render json: @objects.to_json(:include => [:employee, :company])
end