2017-02-26 24 views
0

我創建了一個允許用戶閱讀雜誌的導軌應用程序。查找上一個或下一個數組

爲此,我創建了兩個腳手架,一個用於雜誌,另一個用於其中的頁面。然後我做了一對多的關係,所以頁面屬於雜誌。

每個頁面都是一個圖像,因爲它們是數字化的,然後以多上傳的形式上傳。

最近,我工作的小組要求我找到一種方法,允許用戶同時閱讀兩個頁面,因此我做了一些調整,並且它的工作原理類似於魅力。

不過,我現在有一個問題:我想設置一些「以前」和「下一個」鏈接,但我不能找到一種方法,這樣做

這是我迄今所做的:

magazine_controller.rb

def create 
    @magazine = Magazine.new(magazine_params) 

    if @magazine.save 
     @index = 0 
     (params[:images] || []).each_with_index do |image, index| 
     if index.even? 
      #This way, @index increments every other upload 
      #So I'm sure I have two images with the same page_number 
      @index += 1 
     end 
     @magazine.pages.create(image: image, page_number: @index) 
     end 
     redirect_to @magazine, notice: 'Magazine créé' 
    else 
     render :new 
    end 
    end 

型號/ page.rb

class Page < ApplicationRecord 

    belongs_to :magazine 
    validates_presence_of :magazine 
    mount_uploader :image, PageUploader 

    def previous 
    self.class.first.where('page_number < ?', page_number).limit(1).first 
    end 

    def next 
    self.class.first.where('page_number > ?', page_number).limit(1).last 
    end 

end 

的意見/頁/ show.html.erb

<% @page.each do |p| %> 
    <%= image_tag p.image %> 
    <%= p.inspect %> 
<% end %> 

<br /> 

<%= @page.first.page_number %> 

<%= link_to '< Précédent', magazine_page_path(magazine_id: @magazine.slug, id: @page.previous) if @page.previous %> 
<%= link_to 'Suivant >', magazine_page_path(magazine_id: @magazine.slug, id: @page.next) if @page.next %> 
<br /> 
<%= link_to 'Back', magazines_path %> 

page_controller.rb

private 
    def set_page 
    @magazine = Magazine.find_by(slug: params[:magazine_id]) 
    #was 'find_by' before I was asked to show two records at the same time 
    @page = @magazine.pages.where(page_number: params[:id]) 
    end 
與此代碼

所以,我得到錯誤undefined method 'previous' for #<Page::ActiveRecord_AssociationRelation:0x007ff4f702ad48>。我不知道如何找到是否有下面的「頁面」。

任何想法的歡迎!

預先感謝您

回答

1

記住@page不再是一個單一的記錄,它與兩個記錄的關聯。

您可以創建Pagepreviousnext頁方法的關聯,而不是對象(而不是self.previousprevious)。它將獲得前一頁(或下一頁)的新關聯。請注意附加代碼,以確保您獲得相同的雜誌(您目前的代碼中沒有這些雜誌可用於單頁)。

還要注意的是,如果聯想沒有記錄(計數== 0)方法返回nil ...這是爲了適應你的以前沒有if @page.previous測試(和if @page.next如果沒有下一個)

def self.previous 
    new_page_set = Page.where(page_number: (first.page_number - 1), magazine: first.magazine) 
    return new_page_set.count == 0 ? nil : page_set 
end 

def self.next 
    new_page_set = Page.where(page_numberL (first.page_number + 1), magazine: first.magazine) 
    return new_page_set.count == 0 ? nil : page_set 
end 
+0

對不起它花了很長時間來回復,我試過你的代碼,現在它說'未定義的局部變量或方法'page_set'',它不應該是「new_page_set」嗎? – Jaeger

+0

是的,對不起,斑點。現在糾正了。 – SteveTurczyn

+0

所以,它「工作」(我不再有錯誤),但我的鏈接沒有顯示出來,似乎它找不到前後任何東西,而我知道它有一些東西 – Jaeger

相關問題