我的rails应用程序中的模型(FirstModel)与另一个模型(Item)具有has_many关系。
sumIdx(2).next(first).next(second).next(third).value // 15
项目本身属于:item_thing通过多态关联。 FirstModel上的方法返回" items"的数组,而不是连接模型对象(属于Item类),而是每个Item对象的item_thing,因此它是不同类的对象数组(在rails控制台中检查,该方法返回数组就好了)
class FirstModel < ActiveRecord::Base
has_many :items, :dependent => :destroy
def item_array
a = []
self.items.each do |item|
a.push(item.item_thing)
end
a
end
end
在我的show.json.jbuilder中,对于FirstModel,我想采取那些&#34;项目&#34;并根据项目所属的类使用不同的模板。以下文件路径为&#34; views / api / items / show.jbuilder&#34;
class Item < ActiveRecord::Base
belongs_to :item_thing, :polymorphic => true
end
汽车和图书模板路径是&#34; views / api / cars / show.json.jbuilder&#34;和&#34; views / api / books / show.json.jbuilder。
当我从上面的模板中获取json时,FirstModel对象的名称是可见的,items数组是空的,而我正在尝试获取每个项目的哈希数组,通过其各自的模板呈现。
感谢您的帮助!
答案 0 :(得分:2)
我认为如果将类字符串更改为实际的类名,您的代码将会起作用。
即。 User
而非"User"
。
或者您可以保留字符串并使用.class.to_s
,这将为用户记录返回"User"
。
如果您对元编程感兴趣,那么来自activesupport的constantize
,camelify
和underscore
方法可能非常有用。
答案 1 :(得分:2)
如果你正确地命名你的项目和部分,你可以尝试做类似下面代码的事情。
json.items @item.item_array do |item|
json.partial! "api/#{item.class.to_s.pluralize.downcase}/show"
end
或者你可以在item.class.to_s
上使用case语句,或者作为建议的其他答案之一,使用类实际类而不是类名作为字符串。