문제

나는 버전 역사를 가진 위키를 개발하려고 노력하고 있습니다.

내 계획은 : 위키 컨텐츠를 편집 할 때마다 새로운 콘텐츠로 저장해야합니다.

지금은 Wiki와 Wikicontent의 두 가지 모델이 있으며 그 안에 코드를 따르십시오.

class Wiki < ActiveRecord::Base

  has_many :wiki_contents 

  has_one :current_wiki, :class_name => "WikiContent"
  accepts_nested_attributes_for :current_wiki

  has_one :new_content, :class_name => "WikiContent"
  accepts_nested_attributes_for :new_content

end
class WikiContent < ActiveRecord::Base
  belongs_to :wiki
end

Wiki Model에는 현재 컨텐츠인지 알기 위해 Field Current_id가 있습니다.

위키 컨트롤러에서 나는 실행한다

def new
  @wiki.build_current_wiki
end
def create
  @wiki=Wiki.new(params[:wiki])
  @wiki.save
  @wiki.current_id=@wiki.current_wiki.id
end

그러나 내가 달릴 때마다 :

def edit
  @wiki.build_new_content
end

null을 current_wiki.wiki_id에 할당합니다.

어떻게 해결할 수 있습니까? 아니면 이것을 작동시키는 또 다른 방법이 있습니까?

도움이 되었습니까?

해결책

모델을 다시 디자인하면 더 쉬운 시간을 보낼 수 있다고 생각합니다.

class Wiki < ActiveRecord::Base
  has_many :revisions 

  has_one :latest_revision, :class_name => "Revision", :order => 'updated_at desc', :limit => 1
  accepts_nested_attributes_for :revisions
end

class Revision < ActiveRecord::Base
  belongs_to :wiki
end


# new Wiki page, first revision
def new
  @wiki = Wiki.new
  @revision = @wiki.revisions.build
end

def create
  @wiki=Wiki.new(params[:wiki])
  @wiki.save
end

# adding a Revision to a Wiki page
def edit
  @wiki = Wiki.find(params[:id])
  @revision = @wiki.revisions.build # creating a new revision on edit
end

def update
  @wiki=Wiki.new(params[:wiki])
  @wiki.save
end

def show
  @wiki = Wiki.find(params[:id])
  @revision = @wiki.latest_revision
end

위키에는 많은 개정이 있지만 최신 개정판 만 있습니다. 이제 관리 할 필요가 없습니다 current_id, 이후 latest_revision 협회는 당신을 위해 그것을 돌볼 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top