如何显示可按相同方式排序的三种不同模型的列表:rails中的属性?

时间:2010-05-09 17:43:36

标签: ruby-on-rails collections models

我有一个广告模型,其中有很多电话,电子邮件和信件。

目前,这些都是一个具有不同控制器和动作的独立模型(尽管我想在模型和动作稳定后开始考虑折叠它们的方法)。

他们至少共享两个属性::days和:title

我想要一种方法来表示属于特定Campaign的所有Calls,Emails和Letters作为可排序的集合(可按日期排序),以便为每个调用输出模型名称和path_to()。

例如(我知道下面的内容不正确,但它代表了我一直在努力做的输出/格式:

@campaign_events.each do |campaign_event|
  <%= campaign_event.model_name %>
  <%= link_to campaign_event.title, #{model_name}_path(campaign_event) %>
end

非常感谢。顺便说一句,如果这很重要,那么我想制作:days属性editable_in_place。

以下是我的工作,但需要一些额外的见解

module CampaignsHelper
  def campaign_events
    return (@campaign.calls + @campaign.emails + @campaign.letters).sort{|a,b| a.days <=> b.days}
  end
end

在VIEW中:

<% @campaign_events = campaign_events %>
<% @campaign_events.each do |campaign_event| %>
    <% model_name = campaign_event.class.name.tableize.singularize %>
    <p>
        <%= link_to campaign_event.title,  send("#{model_name}_path", campaign_event) %> 
        <%= campaign_event.days %>
    </p>
<% end %>

1 个答案:

答案 0 :(得分:0)

喜欢这个吗?

# controller
@campaign = Campaign.find(params[:id])
@campaign_events = (@campaign.calls + @campaign.emails + @campaign.letters).sort{|a,b| a.days <=> b.days}

# view
@campaign_events.each do |campaign_event|
  <%= campaign_event.model_name %>
  <%= link_to campaign_event.title, #{model_name}_path(campaign_event) %>
end

在控制器中,您可以找到所有广告系列事件,并按days字段

对其进行排序