2015-08-24 39 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')} 
相關問題