القضبان، has_one، وبناء _ # {جمعية}، accepts_nested_attributes_for
-
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
سوف تأخذ الرعاية من ذلك بالنسبة لك.
لا تنتمي إلى StackOverflow