我正在攻击一个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
答案 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