我正在尝试将对象融合到单个流中。
我创建了一个名为Newsfeed的新模型和控制器。我有它,所以新闻提要has_many :messages和has_many :图像和图像以及消息belong_to :newsfeed。我现在正在设置控制器,并且我有:
def index
@messages = Messages.all
@images = Images.all
@feed = ?
end
我如何融合它们,以便它可以从两者中提取,并在每个需要单独格式化时按时间顺序放置它们?
任何帮助都将非常感谢,谢谢。
发布于 2010-02-11 20:04:49
你可以这样做:
控制器:
def index
messages = Messages.all
images = Images.all
@feed = (messages + images).order_by(&:created_at)
end
查看index.html.erb:
<%= render @feed %>
查看_feed.html.erb:
<% if feed.is_a? Message %>
<%= render "message", :locals => {:message => feed}%>
<% else %>
<%= render "image", :locals => {:image => feed}%>
<% end %>
并加上两个分音_message.html.erb和_image.html.erb
发布于 2010-02-12 04:13:26
我确信这可以从它的ghetto多态性中简化出来,但它对我来说是有效的,我也遇到了同样的问题:“我如何组合所有这些模型结果?!”
我使用一个单独的模型,像你一样,和一个观察者:
class NewsfeedObserver < ActiveRecord::Observer
observe Message, Image
def after_save(object)
@item = Newsfeed.create(
:item_id => object.id,
:item_type => object.class.to_s
)
end
end
然后,在Newsfeed模型中,您可以随心所欲地拉取和整理:
def self.get_items
item_list = []
items = find(:all, :order => "created_at DESC", :limit => 30)
items.collect{ |i| i.item_type.constantize.find(i.item_id) }
end
然后,只需拉出它们并以您喜欢的方式显示在视图中。
#Controller
def index
@feed = Newsfeed.get_items
end
接下来,我可能会开始在流跟踪模型中加入更多内容,以便在其他表中保存命中率,但希望您能理解。
https://stackoverflow.com/questions/2242173
复制相似问题