如何更改列表中最终的项目数

时间:2015-05-29 22:27:12

标签: ruby-on-rails haml

我正在攻击一个rails项目,我想修改最终在特定页面上的项目数量。页面将通过一系列项目填充。

对于我的生活,我无法弄清楚如何只显示2个而不是4个项目。

在haml文件中有以下部分:

%ul.story-list
- @stories.each do |story|
  %li
    - unless story.image.blank?
      .img-container{ class: ((story.video.blank?)? "": "video-container") }
        = image_tag(story.image_url, alt: story.name, class: ((story.video.blank?)? "": "js-has-video"), :video => story.video)
    .story-data
      %h4= story.name
      %h5.location= story.location
      %p.quote= story.story
      - if story.get_connected?
        = link_to 'Get Connected', connect_path
      - elsif story.gather_supplies?
        = link_to 'Gather Supplies', supplies_path
      - elsif story.make_a_plan?
        = link_to 'Make a plan', plan_path

页面显示(在服务器上)有四个故事项目,我希望它只显示两个。我期待打开haml文件,只删除一些行(或注释掉它们)。我很困惑。

所以,我怀疑故事的数量来自控制器或类似的东西。 ..但也许它来自服务器上的占位符数据?

如果您有灵感帮助我,所有代码都在这里 https://github.com/city72/city-72

我试图修改的确切页面就是这个,我希望它只有两个故事: http://collier72.herokuapp.com/stories

奇怪的是,在我的本地环境中,我根本无法编辑这些故事。这就是物品数量来自数据的原因。

故事控制器是这个小小的文件,没有指定故事的数量:

class StoriesController < ApplicationController

  after_filter :static_content

  def index
    all_stories = EmergencyStory.order("index,id ASC").all
    @selected_story = all_stories.select {|s| s.selected}.first
    @stories = all_stories.collect.select {|s| !s.selected}
  end

end

2 个答案:

答案 0 :(得分:1)

打开此文件:

https://github.com/city72/city-72/blob/master/app/controllers/stories_controller.rb#L8

从中更改该行:

@stories = all_stories.collect.select {|s| !s.selected}

到此:

@stories = all_stories.collect.select{|s| !s.selected}.slice(0,2)

据我所知,它返回4的事实并非故意,它只是数据库中的内容。 slice(0,2)将返回前两项。

答案 1 :(得分:1)

首先,您要找3个故事,而不是2.您拥有@selected_story,然后是剩余的@stories。其次,当您在数据库中收到许多故事时,您正在检索所有不会扩展的故事,因此渲染此页面会随着时间的推移而变慢。因此,您需要限制数据库返回的记录数。

获取所选故事。 接下来的两个故事。

class StoriesController < ApplicationController
  after_filter :static_content
  def index
    @selected_story = EmergencyStory.where(selected: true).first
    @stories = EmergencyStory.where(selected: false) # don't get selected
                             .limit(2) # limit records returned
                             .order("index,id ASC")
                             .all
  end
end

如果您要进一步细化,请将这两个查询放入EmergencyStory的方法中。

class StoriesController < ApplicationController
  after_filter :static_content
  def index
    @selected_story = EmergencyStory.selected_story
    @stories = EmergencyStory.recent_stories
  end
end

class EmergencyStory < ActiveRecord::Base
   def self.selected_story
     where(selected: true).first
   end

   def self.recent_stories
     where(selected: false).limit(2).order('index,id ASC').all
   end
end