0

我需要帮助收集修订后的列表。无论是在原始帖子还是帖子的任何后续修订版中,用户都应该能够看到相同的列表。我知道当当前帖子是修订版时,我必须以某种方式使用外键(revision_id)来提取其他修订版,但我不知道如何。

另外,如果有更好的方法可以做到这一点,我愿意接受建议。

post.rb

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

post_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
4

1 回答 1

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
于 2013-06-25T21:33:48.543 回答