1

ここで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ファイルのアップロードを処理するために、ドキュメントコントローラーによって制御されるフォームをどこでどのように構築するのですか?

これをより良く構成する方法について他に何か提案があれば、私はそれをいただければ幸いです。

また、これをデバッグするための良い方法は何でしょうか?方法が足りないようですが、どれ、どこですか?

私はこれらを参照しましたが、解決策を見つけることができませんでした:

アップデート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)画像を共同で作成するには?

4

3 に答える 3

0

アップロード時に初期キーが存在しなかったため、検索したSOの回答はどれもうまくいきませんでした。そのため、リンクすることができませんでした。

したがって、私の解決策は、この設計を試さないことでした。入れ子の少ない別のフォームを作成します。

于 2012-12-05T19:52:01.877 に答える
0

やってみました ?

  @section = @document.sections.build
  @paragraph = @sections.paragraphs.build
于 2012-08-06T15:17:17.003 に答える
0

Carrierwave、jQuery File Uploader、およびネストされたモデルを使用して、Rails で複数のファイルをアップロードする方法を概説した別の投稿で、大きな回答を書きました。おそらくそれは助けになるでしょうか?

Rails 3 + JQuery-File-Upload + ネストされたモデル

于 2013-06-18T21:25:47.140 に答える