オンラインで読むことができる雑誌を作成しようとしています。そうするために、私は雑誌そのもののための足場を作りました、そして、ページのための最初のものの中に入れ子にされた別の足場。その後、マガジンスキャフォールドからのマルチアップロードを許可するシステムを作成しました。これは、同じ時間にアップロードされた各画像(1つの画像= 1ページ)ごとに自動的にページの足場内に新しいエントリを作成します。コントローラのネストされた要素のインクリメントの問題
いくつか試してみたところ、ページ番号としてIDを設定すると自動でインクリメントされ、再び1から開始しないため、スマートではないことがわかりました。だから、私は、複数のアップロードフォームの最初のイメージがページの足場にアップロード/追加されたときに1に設定される、 "page_number"という名前のページ足場の中に新しい列を作成し、次のページでこの番号の増分を取得します。
とにかくここに私のコントローラは、(その関連部分)
class MagazinesController < ApplicationController
#Some code..
def create
@magazine = Magazine.new(magazine_params)
if @magazine.save
if params[:images] #If there are images loaded in the multi upload form
params[:images].each { |image, index| #for each of them...
if index == 0
@magazine.pages.page_number = 1 #Set the first one's page_number to 1
else
@magazine.pages.page_number += 1 #Set its incrementation after that
end
#Save each of the images as a new image from the :image scaffold
@magazine.pages.create(image: image)
}
end
redirect_to @magazine, notice: 'Magazine créé'
else
render :new
end
end
#Some code..
end
私の問題は、私は新しい雑誌をアップロードしようとすると、私は次のように取得する、でも、サーバーを再起動した後、移行が完了したら、ということであるのですエラー:undefined method 'page_number' for #<ActiveRecord::Associations::CollectionProxy []>
私はウェブを調べると、モデルとSQLリクエストとコントローラとこの方法で、私のニーズに合ったものを増やす方法が2つ見つかりました。 RubyMineは「@ magazine.pages」の後にドットを追加した後、この「page_number」を問題なく提案しているので、問題のない状態で、すべてがうまくいっていたため、これを解決する方法はわかりません。 。
私は何を忘れましたか?
は、事前にありがとう 私はあなたのコードを少し書き換えます
ありがとうございました。なぜ私はこの問題を抱えているのですか?しかし、私は自分のコードを書き直しましたが、今は次のエラーがあります: 'undefined method '+' for nil:NilClass'。 "page_number"が何であるかを理解する.. – Jaeger
申し訳ありませんが、 '.each'は' .each_with_index do | image、index | 'でなければなりません。答えを編集しましょう。 – fanta
ありがとう、私はそれが 'each_with_index'だったことに気づいても疲れました。とにかく、それはスムーズに働きました、ありがとう、私は私自身でこの解決策を見つけるだろうとは思わない! – Jaeger