我想在同一个叫做控制器函数的ajax中显示不同类型的对象。当我发回一个ajax调用时,我想要渲染出来。问题是我想要一个对象的"title“属性和另一个对象的"name”属性。我不能渲染两个部分,而且似乎可以弄清楚如何检查对象的类型。我该如何解决这个问题?
这是我当前的控制器设置(不正确)
@objects = Obj.find(:all,:conditions => ["name Like ?", "#{prefix}%"])
@moreObjects = ObjTwo.find(:all,:conditions => ["title Like ?","#{prefix}%"])
if @objects.empty?
render :text => "No Matches"
else
render :partial => 'one', :collection => @objects
end
if @moreObjects.empty?
render :text => "No Matches"
else
render :partial => 'two', :collection => @moreObjects
end发布于 2009-09-03 00:49:12
试试像这样的东西
<%= obj.title if obj.respond_to?(:title) %>发布于 2009-09-03 00:55:21
这里有一个不需要检查类型的选项--在你的Obj和ObjTwo类中添加一个新方法:
def fancy_pants
title
end
def fancy_pants
name
end然后你可以组合@objects和@moreObjects -你只需要一条if语句和一条partial语句。
@search_domination = @objects + @moreObjects
if @search_domination.empty?
render :text => "No Matches"
else
render :partial => 'one', :collection => @search_domination
end发布于 2009-09-03 00:50:02
您可以使用Object.is_a?,但这不是一个非常干净的解决方案。您还可以尝试在表示之前映射数据,以帮助保持视图的轻量级。
https://stackoverflow.com/questions/1370899
复制相似问题