如何在rails中覆盖数组中每个元素的第五个实例?

时间:2015-08-24 04:08:46

标签: ruby-on-rails ruby crud

我首先要说我是铁杆新手。这个问题适用于我目前正在上课的课程。课程主题是CRUD,内容是一个数据库,用于存储帖子及其标题和评论。

说明如下:

  

使用文本" CENSORED"覆盖每个第五个Post实例的标题。

这是我的控制者:

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

我不确定从哪里开始,我真的很感激任何帮助。正确方向上的一点很棒。感谢。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

(0...@posts.size).step(5) {|i| @posts[i].update_attributes(title: 'CENSORED')}

答案 2 :(得分:0)

使用each_with_index代替each;如果索引模5为零,则审查它。

答案 3 :(得分:0)

如果意图是显示&#34; CENSORED&#34;对于每五个元素,我要看看each_with_index:http://apidock.com/ruby/Enumerable/each_with_index

答案 4 :(得分:0)

如果@posts是数组形式

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

OR

如果@posts在您的数据库中

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