想象一下,一个Rails项目根据它们的名字查找动物名称。该Rails应用程序由执行实际查找的外部服务提供支持。该服务基于密钥返回结果。例如,如果我向[GET]/animal?name = benji这样的外部API请求,我会返回类似{“type”:“dog”,“legs”:“4”,“tail-length “:”短“”领“:”蓝“}。然而,如果我传入...?name = flipper到动物终点,我会回到{“type”:“dolphin”,“color”:“gray”,“food”:“fish”}。 (数据以实际的JSON或XML格式返回,我只是在这里用伪代码来表达这一点)导轨和工厂模式
我的第一个问题是这个......鉴于返回调用的属性根据在将一个响应(由于缺少一个更好的术语)解组为一个“模型”对象时,是否传入,是否有意义地实现某种类型的工厂模式(由Russ Olsen的第13章的Ruby中的ala Design Patterns)来创建对象一个合适的班级?还有其他方法是否合理?
我的下一个问题是这样的,可以说我想显示一个网页上的所有动物列表(使用ERB模板)。是否有意义创建不同的部分模板(例如_dolphin.html.erb和_dog .html.erb),然后在主列表视图中放置一个案例,该列表视图可以将每个列表项目渲染为适当的模板。
例如:
list.html.erb ...
<ul>
<% for animal in @animals.each %>
<li>
<% if animal.type == 'dog' %>
<%= render :partial => 'dog', :locals => {:animal => animal} %>
<% elsif item.type == 'dolphin' %>
<%= render :partial => 'dolphin', :locals => {:animal => animal} %>
<% else %>
<%= render :partial => 'generic_animal', :locals => {:animal => animal} %>
<% end %>
</li>
<% end %>
</ul>
(这里animal.type == '狗' 是故意的,我不使用符号(:狗),因为从API返回的数据是一个字符串值,它用于填充animal.type属性。Bad,我知道。)
我正在使用的项目现在正在使用此方法。 (显然,我已经改变了元素/域。)我想知道这是否是一种有效的方法,或者如果其他人已经处理了类似的问题以及他们如何去做。
谢谢!
谢谢,本杰明。在我的例子中,我正在使用动物。实际的应用程序可能更像是“动物”,而“realestate”是两个不同的返回对象,并且视图完全不同。感谢您的反馈! – 2013-03-01 18:07:02