如何链接到多个上传的第一个子图像?

时间:2017-01-16 21:49:58

标签: ruby-on-rails model nested

我创建了一个在线杂志阅读器,其中每个页面都是一个图像,通过多重上传加载。出于某些UX原因,我添加了一个函数,每次上传新页面时都会递增,然后我设置一个系统,其中页码显示在URL而不是ID中,它提供以下内容:

http://localhost:3000/magazines/magazine-4/pages/1

其中1是递增的数字而不是ID。

我想知道如何继续获得这个第一页

以下是我的一些文件,可以让您了解我的进展情况:

magazine_controller.rb

  def create
    @magazine = Magazine.new(magazine_params)

    if @magazine.save
      (params[:images] || []).each_with_index do |image, index|
        //Increments and saves the current page number
        @magazine.pages.create(image: image, page_number: index + 1) 
      end
      redirect_to @magazine, notice: 'Magazine créé'
    else
      render :new
    end
  end

pages_controller.rb(我将页码设置为ID)

  private

  def set_page
    @magazine = Magazine.find_by(slug: params[:magazine_id])
    @page = @magazine.pages.find_by(page_number: params[:id])
  end

  def page_params
    params.require(:page).permit(:titre, :apercu, :page_number)
  end

视图/ _form.html.erb

  <div class="field">
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>

  <div class="field">
    <label for="images[]">Multi Upload</label>
    <%= file_field_tag 'images[]', type: :file, multiple: true %>
  </div>

配置/ routes.rb中

  resources :magazines do
    resources :pages
  end

我真的不知道我还应该告诉你什么。我试图创造这样的东西

def first_page
    self.class.where('page_number = 1', page_number)
  end

但它根本不起作用,似乎试图加载整个班级而不是链接。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您应该使用杂志实例中的pages关联:

def first_page
  self.pages.find_by(page_number: 1)
end

这当然意味着您需要确保每个杂志的页码是唯一的:

class Page
  validates_uniqueness_of :page_number, scope: :magazine_id
end

你还应该make sure there is a db index

add_index :pages, [:page_number, :magazine_id], unique: true