修订后的清单

时间:2013-06-25 20:47:09

标签: ruby-on-rails ruby-on-rails-3 associations foreign-key-relationship model-associations

我需要帮助收集修订后的列表。用户应该能够在原始帖子或帖子的任何后续修订版本中看到相同的列表。我知道我必须以某种方式使用外键(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 个答案:

答案 0 :(得分: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