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
4

1 に答える 1

1

問題を正しく理解していれば、多くpostの. その場合、リレーションは必要なく、次のように/リレーションを使用できます。revisionsrevisionposthas_and_belongs_to_manyhas_manybelongs_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 に答える