我有一个老师模特,有很多学生。当我渲染一个学生(作为json)时,我想删除teacher_id属性并将其替换为我所代表的老师的名字。
实现这一目标的最佳方法是什么?
干杯,
克里斯
答案 0 :(得分:2)
定义名为teacher_name
的方法。
class Student < ActiveRecord::Base
def teacher_name
self.teacher.name
end
end
在调用teacher_name
时包含to_json
方法:
teacher.to_json(:include => {:students => {:methods=> :teacher_name,
:except => :teacher_id
}
}
)
答案 1 :(得分:0)
您始终可以在模型上重新定义to_json方法以执行任何操作:
class Student < ActiveRecord::Base
def to_json
self.attributes.merge(
'teacher_id' => self.teacher.name
).to_json
end
end
更新:根据kandadaboggu 的反馈,采用不同的方法:
class Student < ActiveRecord::Base
def teacher_name
self.teacher and self.teacher.name
end
def to_json(options = { })
super(
{
:methods => :teacher_name,
:except => :teacher_id)
}.merge(options)
)
end
end
请注意,当使用像这样的强力合并时,结果有时不太令人满意,但会用于默认情况。如果指定:methods或:除了您自己的选项外,将忽略默认值。