如何使用jbuilder提取多个对象数组中的值。?
我有一个包含多个对象的数组。
@array1= [ ]
#pushed different types of objects into this array.
if xyz
@array1 << object_type1 # having fields id,f_name
else
@array1 << object_type2 # having fields id,l_name
现在我想要jbuilder
json.array! @array1 do |myarray|
json.id myarray.id
json.name myarray.f_name || myarray.l_name # how to check object type here
end
当我尝试这个时它会给我一个像
这样的错误undefined method `l_name' for #<Object_type1:0xb496eda8>
如何检查或告诉jbuilder它必须使用哪个对象类型作为名称字段。?
答案 0 :(得分:1)
我不知道这是否是正确的方式,但我尝试并得到了我想要的东西
json.array! @array1 do |myaarray|
if myarray.class == ObjectType
json.name myarray.f_name
json.id myarray.id
else
json.name myarray.l_name
json.id myarray.id
end
end
答案 1 :(得分:1)
如果你的两个ObjectType都是ActiveRecord模型,你可以做一些更清洁的事情:
json.array! @array1 do |myarray|
json.name myarray.has_attribute? "f_name" ? myarray.f_name : myarray.l_name
json.id myarray.id
end
这会检查myarray
是否具有f_name
属性,是否确实使用了该属性,否则我们知道它是另一个ObjectType
,因此我们使用l_name
。如果您之前没有看到过if / else语句的一行,我使用的语法是:
<condition> ? <if_true> : <if_false>
所以你可以这样做:
@post.nil? ? return "No post here" : return "Found a post"
或者您可以在模型中为每个ObjectType添加一个方法,如:
def name
l_name # or f_name, depending on which ObjectType it is
end
然后你可以这样做:
json.array! @array1 do |myarray|
json.name myarray.name
json.id myarray.id
end