2017-02-20 4 views
0

Я создал приложение Rails, чтобы посетители могли читать журналы в Интернете. Я создал два леса, один для самого журнала и один для страниц внутри журналов, которые будут отсканированы.Неопределенный метод '+' для # <Class >

Дело в том, что я использую номер страницы (целое число) как ссылку вместо идентификатора, так как я хочу, чтобы URL-адрес первой страницы журнала выглядел так: localhost:3000/magazines/magazine-test/1, а не его идентификатор. Таким образом, при загрузке нового журнала я создаю цикл, который увеличивает номер страницы pagazine с помощью индекса цикла.

Вот мой «создать» действие, так что у вас есть хорошее представление о том, что я говорю о:

def create 
    @magazine = Magazine.new(magazine_params) 

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

Моя проблема заключается в том, что если я пытаюсь обновить этот журнал и добавить еще несколько страниц номера страниц будут падать обратно до 1. так что я попытался изменить свой «обновление» действия следующим образом:

def update 
    if @magazine.update(magazine_params) 
     if params[:images] 
     (params[:images] || []).each_index do |image, index| 
      @pages = @magazine.pages.order("page_number DESC").first 
      @magazine.pages.create(image: image, page_number: @pages + index + 1) 
     abort(@pages) 
     end 
     end 
     redirect_to @magazine, notice: 'Magazine mis à jour' 
    else 
     render :edit 
    end 
    end 

Однако с помощью этого метода, я получаю следующее сообщение об ошибке: NoMethodError in MagazinesController#update undefined method '+' for #<Page:0x007fe694b15af8>

Я пробовал несколько вещей (например, преобразование переменной в целое число), но я все еще получаю эту ошибку.

Кто-нибудь как идея?

Спасибо заранее

ответ

1

изменение этой линии:

@magazine.pages.create(image: image, page_number: @pages + index + 1) 

в

@magazine.pages.create(image: image, page_number: @pages.page_number || 0 + index + 1) 
+0

Я попробовал это, я получил следующее сообщение об ошибке: 'ноль не может быть принужден к Fixnum' – Jaeger

+0

Я сделал редактирование, уродливое и взломанное, но должен дать вам представление о том, как его выработать –

+0

|| означает «или», поэтому, если @ pages.page_number возвращает nil, он будет использовать 0 –

Смежные вопросы