Rails アプリのテンプレートからレコードを作成する機能を作成しようとしていますが、ユーザーからのカスタマイズがいくつかあります。
ユーザーが埋め込みドキュメントのフィールドをオーバーライドできるようにしようとすると、問題が発生します。ドキュメントは更新されずに複製されます。
タイプのオブジェクトから始めExternalLinkGroupTemplate
ますExternalLink
。ExternalLinkGroup
も含むを作成するために使用されますExternalLink
。ユーザーは、リンクテキストが複製されたときにリンクテキストを編集できる必要がありますが、URL は編集できないため、ユーザーにはフォームが表示されます。別のファイルにある場合、成功のためにテストを削除するなど):
@link_group = ExternalLinkGroup.new
@template.links.each do {|link| @new_link_group.links.push link.dup }
@link_group.update_attributes(params[:link_group])
リンク グループが作成されると、テンプレートの 2 倍のリンクが含まれ、2 番目のセットのみが変更されます。明らかに、Mongoid/ActiveWhatever は既存のアイテムを更新するのではなく、新しいアイテムを作成しています。
何も複製せずにパラメーターのすべてのフィールドを通過させたくないのは、実際にはいくつかの継承が行われており、リンクの一部が異なるタイプで余分なフィールドを持つため、部分的なコードをコーディングしたくないからです。隠しフィールドがたくさんあるだけのそれぞれについて。また、ユーザーが隠しフィールドを変更して何でも送信できるようにしたくありません。
_id
まだ保存されていないため、参照できません。の配列インデックスでtemplate[links_attributes]
十分だと思っていましたが、そうではありません。
どうする?
Rails 3.2.13、MongoDB 2.2.x、Mongoid 3.0.5 を使用。