Rails, Has_one, 빌드 _#{Association}, Accepts_nested_attributes_for
-
05-07-2019 - |
문제
나는 버전 역사를 가진 위키를 개발하려고 노력하고 있습니다.
내 계획은 : 위키 컨텐츠를 편집 할 때마다 새로운 콘텐츠로 저장해야합니다.
지금은 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
협회는 당신을 위해 그것을 돌볼 것입니다.
제휴하지 않습니다 StackOverflow