0

我需要幫助收集發佈修訂列表。用戶應該能夠看到相同的列表,無論是原始帖子還是後續的任何修訂版本。我知道我必須以某種方式使用外鍵(revision_id)在當前帖子是修訂版時拉取其他修訂版,但我不知道如何。發佈修訂列表

此外,如果有更好的方法來做到這一點,我會提出建議。

post.rb

class Post < ActiveRecord::Base 
    #... 
    has_many :revisions, class_name: "Post", foreign_key: "revision_id" 
    #... 
end 

posts_controller.rb

class PostsController < ApplicationController 
    def show 
     @post = Post.find(params[:id]) 

     if @post.revision_id = nil 
      @original = @post 
     else 
      @original = @post.revision_id 
     end 

     @revisions = @original.revisions.all 
      #... 
    end 
end 

回答

1

如果我理解正確的問題,post可以有很多revisionsrevision只能屬於一個post。如果是這樣,你不需要has_and_belongs_to_many關係,你可以使用has_many/belongs_to關係,如下:

class Post < ActiveRecord::Base 
    has_many :revisions, class_name: 'Post', foreign_key: 'revised_id' 
    belongs_to :revised, class_name: 'Post' 
end 

所以現在你可以在你的控制器做:

if @post.revision_id.nil? 
    @original = @post 
else 
    @original = @post.revised 
end 

@revisions = @original.revisions 

,或者你可以將這個模型:

def original 
    revised_id.present? ? revised : self 
end 

,然後你可以整理你的控制器:

@revisions = @post.original.revisions 
+0

這工作得很好!非常感謝。我很好奇如何過濾掉這些修改。你對我如何做到這一點有什麼看法? – anater

+0

你想如何過濾它們?無論如何,你可以像往常一樣使用'scopes',例如:'@ post.original.revisions.your_current_scope'。 –

+0

例如,創建新帖子時,您可以選擇將其改爲其他帖子的修訂版。但是,目前它會顯示所有帖子,其中包括修改其他帖子的帖子。我只想顯示有修改的帖子,但不是修改本身。 – anater