2016-12-08 35 views
0

我正在尝试创建一个可以在线阅读的杂志。为此,我为杂志本身创建了一个脚手架,然后为第一个页面嵌套了另一个脚手架。之后,我创建了一个系统,允许从杂志脚手架进行多重上传,这将自动在页面的脚手架内为同一时间上传的每张图片创建一个新条目(一张图片=一页)。控制器嵌套元素的增量问题

经过一番尝试,我认为设置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” 。

我忘了什么?

预先感谢您

回答

1

我将重写代码一点点:

def create 
    @magazine = Magazine.new(magazine_params) 

    if @magazine.save 
    (params[:images] || []).each_with_index do |image, index| #for each of them... 
     #Save each of the images as a new image from the :image scaffold 
     @magazine.pages.create(image: image, page_number: index + 1) 
    end 
    redirect_to @magazine, notice: 'Magazine créé' 
    else 
    render :new 
    end 
end 

你得到的错误是因为你想分配给pages关系page_number,这是真的,它不存在。 @magazine .pages是一个不是实例的关系,因此该关系没有定义(page_number)方法。

我所做的是,我只是将page_number分配给在@magazine.pages.create...行中创建的page实例,并且索引将与循环的索引+1对齐。

(params[:images] || []).each是只是为了避免具有if以检查images PARAM进来的请求时,如果不来,环路将不执行,因为该阵列将是空的(|| [])。

+0

非常感谢您的明确回答!我现在明白了为什么我遇到了这个麻烦,但是,我已经重写了我的代码,但是现在我有以下错误:未定义方法+'for nil:NilClass',看起来Rails仍然没有了解“page_number”是什么.. – Jaeger

+1

对不起,'.each'应该是'.each_with_index do | image,index |'。让我编辑答案。 – fanta

+1

非常感谢你,我太累了,不知道它是'each_with_index',无论如何,它工作顺利,非常感谢你,我不认为我会自己找到这个解决方案! – Jaeger