我正在尝试创建一个可以在线阅读的杂志。为此,我为杂志本身创建了一个脚手架,然后为第一个页面嵌套了另一个脚手架。之后,我创建了一个系统,允许从杂志脚手架进行多重上传,这将自动在页面的脚手架内为同一时间上传的每张图片创建一个新条目(一张图片=一页)。控制器嵌套元素的增量问题
经过一番尝试,我认为设置ID为页码不是很聪明,因为它会自动增加,不会再从1开始。因此,我在名为“page_number”的页脚架内创建了一个新列,当多上传表单中的第一个图像上传/添加到页脚手架时,该列将被设置为1,然后下一页将获取此数字的增量。
反正这里是我的控制器(它的相关部分)
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请求以及通过控制器和此方法递增事物,这更符合我的需求。我不知道如何解决这个问题,因为我需要在另一个嵌套元素中指定一些东西,并且一切都很顺利,没有任何问题,并且因为RubyMine在没有问题的情况下在“@ magazine.pages”之后添加一个点之后建议这个“page_number” 。
我忘了什么?
预先感谢您
非常感谢您的明确回答!我现在明白了为什么我遇到了这个麻烦,但是,我已经重写了我的代码,但是现在我有以下错误:未定义方法+'for nil:NilClass',看起来Rails仍然没有了解“page_number”是什么.. – Jaeger
对不起,'.each'应该是'.each_with_index do | image,index |'。让我编辑答案。 – fanta
非常感谢你,我太累了,不知道它是'each_with_index',无论如何,它工作顺利,非常感谢你,我不认为我会自己找到这个解决方案! – Jaeger