ここでrailsapiで説明されているような1対多->1対多の構造を実装することを目指しています:
class Document < ActiveRecord::Base
has_many :sections
has_many :paragraphs, :through => :sections
end
class Section < ActiveRecord::Base
belongs_to :document
has_many :paragraphs
end
class Paragraph < ActiveRecord::Base
belongs_to :section
end
トピックのrailscastで説明されているように、段落クラスに、セクションと段落を追加および削除できるネストされたAJAXフォーム内で、carrierwaveを介してファイルをアップロードさせようとしています。
完全なドキュメント内でのみ画像を表示するため、ドキュメントコントローラー内にコードを保持しようとしています。したがって、現在、コントローラーは次のとおりです。
def show
@document = Document.find_by_username(params[:documentname])
@section = @document.sections
# @paragraph = @section.paragraphs #DONT UNDERSTAND WHY UNCOMMENTING THIS DOESNT WORK.
end
私のドキュメントモデルとセクションモデルの両方にaccepts_nested_attributes_for
設定があります。ただし、ドキュメントビューをロードするときに、@paragraph
上記のコメントを外すと、セクションの割り当ては成功したことを示すエラーが表示されますが、メソッドがないために段落の割り当ては失敗しました。
NoMethodError in DocumentController#show
undefined method `paragraph' for #<ActiveRecord::Relation:0x007f9b6409c340>
コメントアウトすると、セクション割り当てが正常に読み込まれているように見えます。現在、フォームを設定できないため、セクションと段落テーブルは完全に空白になっています。これが問題の一部である可能性があります。しかし、nilを使用すると、メソッドがない場合とは異なるエラーが発生すると思います。ですから、すでに内部で何かがおかしいのではないかと思います。
それで、ここでの私の主な混乱は、データを受け入れるために、そして特にcarrierwaveファイルのアップロードを処理するために、ドキュメントコントローラーによって制御されるフォームをどこでどのように構築するのですか?
これをより良く構成する方法について他に何か提案があれば、私はそれをいただければ幸いです。
また、これをデバッグするための良い方法は何でしょうか?方法が足りないようですが、どれ、どこですか?
私はこれらを参照しましたが、解決策を見つけることができませんでした:
- http://railscasts.com/episodes/196-nested-model-form-revised
- http://railscasts.com/episodes/253-carrierwave-file-uploads
- ネストされたフォームを使用したCarrierwaveのアップロード?
- Rails 3+JQuery-ファイル-アップロード+ネストされたモデル
- Rails3とネストされたjQueryファイルアップロードモデル
アップデート1
問題は私の悪いshowコマンドに起因しているのではないかと思いますか?適切なセクションを適切な段落に多重指数化することはできませんか?それで、
def show
@document = Document.find_by_username(params[:documentname])
@section = @document.sections
# @paragraph = @section.paragraphs #DONT UNDERSTAND WHY UNCOMMENTING THIS DOESNT WORK.
end
次のようになります。
def show
@document = Document.find_by_username(params[:documentname])
@section = @document.sections
@paragraph = @section.find(params[:section_id]).paragraphs
end
これは機能しませんが、そのようなものですか?セクションを個々の段落にリンクしていないように見える方法があります。上記で発生するエラーは次のとおりです。
ActiveRecord::RecordNotFound in DocumentController#show
Couldn't find Section without an ID
アップデート2
多分それは私がすべてのshowコマンドを望遠鏡で見る必要があることを意味しますか?つまり、適切なセクションの適切な段落を取得することは、次のようにカバーされます。
ドキュメントコントローラで:
def show
@document = Document.find_by_username(params[:documentname])
@section = @document.sections
end
セクションコントローラー内:
def show
@section = Section.find(params[:id])
@paragraph = @section.pictures
end
その場合、ネストされたフォームを設定するにはどうすればよいですか?document#showページ内からrailcastsスタイルのajaxインターフェイスで(1)セクション、(2)段落、および(3)画像を共同で作成するには?