Frage

Ich versuche, ein Wiki mit Versionsgeschichte zu entwickeln.

mein Plan ist: jedes Mal, wenn ich einen Wiki Inhalt bearbeiten, soll es als einen neuen gerettet werden

.

für jetzt, ich habe zwei Modelle, Wiki und wikicontent und folgenden Code in ihnen:

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-Modell hat ein Feld current_id, zu wissen, welche Inhalte die aktuelle ist.

in der Wiki-Controller i run

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

Aber wenn ich versuche zu laufen:

def edit
  @wiki.build_new_content
end

es weist NULL current_wiki.wiki_id.

Wie kann ich beheben, dass? oder gibt es eine andere Möglichkeit, dies Arbeit zu kommen?

War es hilfreich?

Lösung

Ich denke, man kann es leichter haben, wenn Sie Ihre Modelle ein bisschen wieder entwerfen.

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

Ein Wiki hat viele Revisionen, hat aber nur eine letzte Revision. Jetzt müssen Sie nicht current_id verwalten, da die latest_revision Verein kümmern, dass für Sie brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top