0

我正在尝试做的事情

我正在我的 Rails 应用程序中使用 Sphinx 对几个不同的模型进行搜索,它成功地返回了加权结果(包括几种不同类型的对象,比如帖子和用户)。我目前正在使用 ( many.each { |one| one.inspect }) 进行测试,并且效果很好。

我现在正在尝试为每个具有相同名称的模型编写一个方法,该方法将以我选择的格式输出我的对象。例如,而不是one.inspect,我想放置one.print_pretty并让它输出 html,该 html 可以整齐地打印出特定于该类型对象的信息。使用用户示例,我希望它输出如下内容:

<div class="small-2 columns">
    <%= image_tag(one.userpic.avatar.url) %>
</div>
<div class="small-10 columns">
    <div class="row">
        <h3 class="subheader"><%= one.first + " " + one.last %></h3>
    </div>
    <div class="row">
        <%= one.tagline %>
    </div>
</div>

相比之下,在我的帖子模型上,它应该输出适用于帖子属性和优先级的不同内容。

问题

如何为 Rails 模型编写一个方法,该方法将输出 html 样式的块以编码或以其他方式输出未知对象类型(来自有限池)的样式?

4

1 回答 1

0

像这样的东西对你有用吗?您可以创建一个单独的部分,为每个对象类显示不同的输出。在您看来,将对象传递给辅助方法函数。例如:

<%= render_partial_for_this_type_of_object(your_object) %>

然后在一个辅助方法中,有类似的东西:

def render_partial_for_this_type_of_object(object)
    if object.class.name == "ClassA"
        render 'class_a_partial', :object => object
    elsif object.class.name == "ClassB"
         render 'class_b_partial', :object => object
    end
end

总而言之,您将对象从视图传递给助手,识别它是什么类的对象,然后根据其类将该对象传递给适当的部分,然后将在视图中呈现。

我确信还有其他方法可以做到这一点,但这在我刚刚构建的应用程序中效果很好。

于 2013-07-30T19:32:26.600 回答