如何覆盖 rails 数组中元素的每五个实例?
How do I overwrite every fifth instance of an element in an array in rails?
首先我会说我是 rails 的新手。这个问题是针对我目前正在参加的 class。课程主题是 CRUD,内容是存储帖子及其标题和评论的数据库。
说明如下:
Overwrite the title of every fifth instance of Post with the text "CENSORED".
这是我的控制器:
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
我真的不确定从哪里开始,非常感谢任何帮助。朝着正确的方向前进会很棒。谢谢。
使用each_with_index
代替each
;如果索引模 5 为零,则对其进行审查。
如果目的是 显示 "CENSORED" 每五个元素,那么我会看一下 each_with_index:http://apidock.com/ruby/Enumerable/each_with_index
如果@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
@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
这里有几种方法,其中 @posts = Post.all
,并假设第一个 post 将被审查:
#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')}
首先我会说我是 rails 的新手。这个问题是针对我目前正在参加的 class。课程主题是 CRUD,内容是存储帖子及其标题和评论的数据库。
说明如下:
Overwrite the title of every fifth instance of Post with the text "CENSORED".
这是我的控制器:
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
我真的不确定从哪里开始,非常感谢任何帮助。朝着正确的方向前进会很棒。谢谢。
使用each_with_index
代替each
;如果索引模 5 为零,则对其进行审查。
如果目的是 显示 "CENSORED" 每五个元素,那么我会看一下 each_with_index:http://apidock.com/ruby/Enumerable/each_with_index
如果@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
@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
这里有几种方法,其中 @posts = Post.all
,并假设第一个 post 将被审查:
#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')}