Problem un method

Witam!
Wrzuciłem appke na c9.io i pojawił się problem. (Lokalnie wszystko działa)

NoMethodError in Books#create
undefined method `map’ for nil:NilClass

_form

<%= simple_form_for @book, :html => { :multipart => true } do |f| %>
    <%= select_tag(:category_id, options_for_select(@categories), :prompt => "Wybierz kategorie") %>
    <%= f.file_field :book_img %>
    <%= f.input :title, label: "Tytuł książki"  %>
    <%= f.input :description, label: "Opis książki" %>
    <%= f.input :author, label: "Autor" %>
    <%= f.button  :submit, :class => "btn-custom2" %>
<% end %>

Book Controller

class BooksController < ApplicationController
before_action :find_book, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, only: [:new, :edit]



def index
  if params[:category].blank?
   @books = Book.all.order("created_at DESC")
  else
   @category_id = Category.find_by(name: params[:category]).id
   @books=Book.where(:category_id => @category_id).order("created_at DESC")
  end
end



def show
   if @book.reviews.blank?
     @average_review = 0
  else
     @average_review=@book.reviews.average(:rating).round(2)
  end
end



def new
   @book = current_user.books.build
   @categories = Category.all.map{ |c| [c.name, c.id] }   
end



def edit   
  @categories = Category.all.map{ |c| [c.name, c.id] }
end



def update
  if @book.update(book_params)
      redirect_to book_path(@book)
  else
      render 'edit'
  end
    
 end




def destroy
  @book.destroy
  redirect_to root_path
end



def create
        
  @book = current_user.books.build(book_params)
  @book.category_id = params[:category_id]
        
    
 if @book.save
    redirect_to root_path
 else
    render 'new'
 end
end



private
    
def book_params
  params.require(:book).permit(:title, :description, :author, :category_id, :book_img)
end
    
def find_book
   @book = Book.find(params[:id])
end
    
end

Book Model

class Book < ActiveRecord::Base
  belongs_to :user
  belongs_to :category
  has_many :reviews

  has_attached_file :book_img, styles: { book_index: "250x350>", book_show: "325x475>" }, default_url: "/images/:style/missing.png"
  validates_attachment_content_type :book_img, content_type: /\Aimage\/.*\Z/
end

Nie wiem co czynic :stuck_out_tongue:
Proszę o pomoc.

Sformatuj jakoś ten kod co wrzuciłeś w tym temacie.
Wrzuć proszę również kod z modelu Book.

pusta tabela z kategoriami?

Chyba nie przechodzi Ci save’a - przez co renderuje ‘new’, a w create nie ustawiasz zmiennej instancyjnej @categories.

Tabela ma dane.

Co ciekawe jak nie przesyłam pliku, to jakimś cudem przepuszcza i nawet potem widzi kategorie itd.
Na lokalu wszystko działa bez problemu.

Czyli nie przechodzi Ci save, zobacz czy masz uprawnienia zapisu do publica.

BTW nawet jak by tabela categories była pusta to by zwróciło pustą relację a nie nila i nic by się nie wywaliło.

Public ma full opcje uprawnień i nadal to samo

No to trzeba debugować co tam nie gra :stuck_out_tongue:
Najłatwiej będzie jak zamienisz save na save! żeby Ci wywaliło wyjątek i sprawdzisz w logach co nie przeszło.

Ten tego… Jak to zrobić? Uczę się dopiero i nie za bardzo rozumiem.

Hmm… Więc tak - wywala błąd, ponieważ chcesz wykonać .map na @categories, które w akcji create jest tylko i wyłącznie w formularzu. Dzięki temu wiadomo, że coś się po prostu nie zapisuje. I teraz - jeśli zamiast .save wywołasz .save! (tak tu chodzi o wykrzyknik) to ta metoda nie zwróci - w Twoim wypadku - false tylko “wznieci” błąd. Konfiguracja STG zwykle ma to do siebie, że wypluwa bezpośrednio błędów, tylko wyświetla info, że “coś poszło nie tak”. Więc musisz zajrzeć do logów serwera railsowego na Twoim hoście (zwykle w katalogu logs) i zobaczyć co nie bangla w zapisywaniu.

Ostanie linijki loga

Started POST "/books" for 91.237.85.65 at 2015-12-15 17:24:21 +0000
Cannot render console from 91.237.85.65! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by BooksController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"hKI1PzQJ6/C0ChVkIxkPfPW2V4polReFGjyS914EaH3JbeEwGWZfxg6jw/mt8EQdjMoeOWjmpA8kJANFXlLpXQ==", "category_id"=>"1", "book"=>{"book_img"=>#<ActionDispatch::Http::UploadedFile:0x007f87281d08b0 @tempfile=#<Tempfile:/home/ubuntu/workspace/RackMultipart20151215-773-9l8cb8.jpg>, @original_filename="fg.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"book[book_img]\"; filename=\"fg.jpg\"\r\nContent-Type: image/jpeg\r\n">, "title"=>"fdgfd", "description"=>"gdfgdfg", "author"=>"gdfg"}, "commit"=>"Create Book"}
  e[1me[36mUser Load (0.2ms)e[0m  e[1mSELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1e[0m  [["id", 1]]
Command :: file -b --mime '/home/ubuntu/workspace/3d4044d65abdda407a92991f1300ec9720151215-773-ct999s.jpg'
Command :: identify -format '%wx%h,%[exif:orientation]' '/home/ubuntu/workspace/3d4044d65abdda407a92991f1300ec9720151215-773-j21gdl.jpg[0]' 2>/dev/null
[paperclip] An error was received while processing: #<Paperclip::Errors::CommandNotFoundError: Could not run the `identify` command. Please install ImageMagick.>
Command :: identify -format '%wx%h,%[exif:orientation]' '/home/ubuntu/workspace/3d4044d65abdda407a92991f1300ec9720151215-773-j21gdl.jpg[0]' 2>/dev/null
[paperclip] An error was received while processing: #<Paperclip::Errors::CommandNotFoundError: Could not run the `identify` command. Please install ImageMagick.>
  e[1me[35m (0.1ms)e[0m  begin transaction
Command :: file -b --mime '/home/ubuntu/workspace/3d4044d65abdda407a92991f1300ec9720151215-773-w1ikv7.jpg'
  e[1me[36m (0.1ms)e[0m  e[1mrollback transactione[0m
Completed 422 Unprocessable Entity in 67ms (ActiveRecord: 0.4ms)

ActiveRecord::RecordInvalid (Validation failed: Book img Could not run the `identify` command. Please install ImageMagick., Book img Could not run the `identify` command. Please install ImageMagick.):
  app/controllers/books_controller.rb:56:in `create'


  Rendered /usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_source.erb (8.6ms)
  Rendered /usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (7.3ms)
  Rendered /usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (3.9ms)
  Rendered /usr/local/rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (99.3ms)

Nie masz, drogi kolego, ImageMagicka na serwerze :slight_smile: ImageMagick to biblioteka odpowiedzialna za obróbkę grafiki.

EDIT: według tego co widzę, wystarczy, że zalogujesz się przez ssh i odpalisz sudo apt-get install imagemagick

Uff działa :stuck_out_tongue:
Wielkie dzięki za pomoc.

spoczko! powodzenia w dalszych próbach! :smile:

EDIT: nie zapomnij, że jak znów Ci nie przejdzie save, na przykład dodasz walidację to i tak musisz w akcji ustawić @categories, bo inaczej znów wywali Ci to co na początku.