我需要帮助收集修订后的列表。用户应该能够在原始帖子或帖子的任何后续修订版本中看到相同的列表。我知道我必须以某种方式使用外键(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
答案 0 :(得分:1)
如果我正确理解了问题,post
可以有多个revisions
但revision
只能属于一个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