2015-08-24 34 views
1

我会开始说我是新来的铁轨。这个问题是针对我目前正在参加的课程。课程主题是CRUD,内容是一个存储帖子及其标题和评论的数据库。如何覆盖rails中数组中每个元素的第五个实例?

的说明如下:

覆盖后的每第五个实例的标题文本“截尾”。

这是我的控制器:

class PostsController < ApplicationController 

    def index 

    @posts = Post.all 
    end 

    def show 
    end 

    def new 
    end 

    def edit 
    end 
end 

这是我的看法文件:

<h1>All Posts</h1> 

<% @posts.each do |post| %> 

    <div class="media"> 
     <div class="media-body"> 
     <h4 class="media-heading"> 
      <%= link_to post.title, post %> 
     </h4> 
     </div> 
    </div> 
<% end %> 

这是我的模型:

class Post < ActiveRecord::Base 
    has_many :comments 
end 

我真的不知道在哪里甚至开始,真的很感谢任何帮助。正确的方向将是一个伟大的点。谢谢。

+0

这是数据库意义上的覆盖,还是视图意义上的覆盖? – Makoto

+0

仅仅从视觉上来说,他们只是希望可能有坏语言的帖子显示“审查”,而不是更改帖子本身。 – JonMalis

+0

并感谢大家对此的帮助。 – JonMalis

回答

1
@posts = Post.all 
@posts.each_with_index do |post, index| 
    if index % 5 == 4 # since index starts at 0, every 5th object will be at positions 4, 9, 14, 19 etc. 
    # Do the change on post object 
    post.update_attributes(title: 'CENSORED') 
    end 
end 
+0

非常感谢@Rajesh Omanakuttan!我正在尝试'如果发布%5'...这是有道理的,并且完美地工作。 – JonMalis

+0

@JonMalis:很高兴帮助和学习:) –

0

使用each_with_index而不是each;如果索引模5为零,则审查它。

+1

'index%5 == 0'会产生意想不到的结果。特别是,第一项也将被审查。 –

+0

@SergioTulentsev:对我来说并不意外。 OP每五分钟就说一次,而不指定哪一个应该是第一个被审查的人。而且,抵消也是微不足道的,OP应该能够推导出如何。 (其实,有人已经发布了它,所以...) – Amadan

+0

是啊,你是对的,没关系:) –

0

如果@posts是以阵列形式

@posts.each_with_index do |post,index| 
    post.update!(title: "CENSORED") if index % 5 == 0 
end 

如果@posts在您的数据库中

@posts.each do |post| 
    post.update!(title: "CENSORED") if (post.id % 5 == 0) 
end 
+0

这假定id是整数。而id序列没有漏洞。 –

1

这里有几种方法,其中@posts = Post.all,并假设第一柱是待检查:

#1

e = [[:CENSOR] + [:PUBLISH]*4].cycle 
    #=> #<Enumerator: [[:CENSOR, :PUBLISH, :PUBLISH, :PUBLISH, :PUBLISH]]:cycle>  
@posts.each {|p| p.update_attributes(title: 'CENSORED') if e.next==:CENSOR } 

#2

([email protected]).step(5) {|i| @posts[i].update_attributes(title: 'CENSORED')} 
相关问题