القضبان، has_one، وبناء _ # {جمعية}، accepts_nested_attributes_for

StackOverflow https://stackoverflow.com/questions/1808259

  •  05-07-2019
  •  | 
  •  

سؤال

واني اسعى الى تطوير ويكي مع النسخة التاريخ.

وخطتي هي: في كل مرة أقوم بتحرير المحتوى ويكي، فإنه يجب الحصول على حفظها واحد جديد

.

والآن، لدي نموذجين، ويكي، و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

ونموذج المعرفة لديه 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

ويقوم بتعيين فارغة إلى 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