0
내 블로그 앱에는 다른 사람들의 게시물을 복사하여 자신의 것으로 호스트 할 수있는 기능이 있습니다.연애 편지에 연관성이있는 항목 복제
Post
은 소유자와 연결되어 있습니다.
schema "posts" do
field :title, :string
field :content, :string
belongs_to :owner, MyApp.Accounts.User, foreign_key: :owner_id
end
내가 ID로
Post
의 사본을 얻을 ID와 OWNER_ID 필드를 제거하려는
가, 새 소유자 ID를 주조 한 다음 삽입합니다.
resolve fn (%{post_id: post_id, new_owner_id: new_owner_id}, _info) ->
Repo.get!(Post, post_id)
|> Map.delete(:id)
|> Map.delete(:owner_id)
|> Post.changeset(%{owner_id: new_owner_id})
|> Repo.insert!
end
하지만 내가 할 때이 오류가 얻을 :
Request: POST /api
** (exit) an exception was raised:
** (RuntimeError) attempting to cast or change association `owner` from `MyApp.Content.List` that was not loaded. Please preload your associations before manipulating them through changesets
이 복사본을 할 수있는 올바른 방법은 무엇입니까? 그것은 분명 오류 메시지에 언급 한 바와 같이
이 상황에서 데이터의 분기/발산이 바람직합니다. 새로 복사 한 게시물의 변경 사항은 새 소유자의 사본에만 있습니다. 이러한 요구 사항을 감안할 때 여전히 최선의 방법인가? –
우리가 이야기하고있는 변화의 유형에 따라 크게 달라집니다. 서문, 주석, 강조 표시를 추가하는 경우에는 그렇습니다. 그것이 텍스트 교정에 관한 것이라면 나는 표절을 고맙게 생각합니다. 이것이 바로 표절이 무엇인지에 대한 것입니다. 그래서 나는 확실히 원래 게시물에 대한 참조와 주변에 몇 가지 "장식"을 고집 할 것입니다. _ 명확하게 구분됩니다. 아마도 하나의 속성을이 다 대일 테이블에 "고정"과 같은 수정 사항을 추가하여 원래 게시물 (게시물의 버전 저장을 의미 함) 또는 기타 사항에 따라 수정하지 못하게 할 수 있습니다. 그렇게. – mudasobwa
어쨌든, 지금 당장은'Repo.preload'로 계속 진행할 수 있습니다. 나중에 나에게 감사를 표합니다. – mudasobwa