2013-06-06 13 views
6

Ciao io sto affrontando questo errore, completamente nuovo alle rotaie figura quindi non posso che cosa sta causandometodo non definito `map 'per nil: NilClass, che cosa causa questo?

mia newBook.html.erb

<html> 
    <head> 
     <title> new Book </title> 
    </head> 
    <body> 
     <h1><%= @hello_message %></h1> 
     <h1>Add new book</h1> 
     <%= form_tag :action => 'create' %> 
     <p> 
      <label for="book_title">Title</label>: 
      <%= text_field 'book', 'title' %> 
     </p> 
     <p> 
      <label for="book_price">Price</label>: 
      <%= text_field 'book', 'price' %> 
     </p> 
     <p> 
      <label for="book_subject">Subject</label>: 
      <%= collection_select(:book,:subject_id,@subjects,:id,:name) %> 
     </p> 
     <p> 
      <label for="book_description">Description</label> 
      <br/> 
      <%= text_area 'book', 'description' %> 
     </p> 
     <%= submit_tag "Create" %> 
     <%= end_form_tag %> 
     <%= link_to 'Back', {:action => 'list'} %> 
    </body> 
</html> 

mio libro modello: book.rb

class Book < ActiveRecord::Base 
    attr_accessible :title, :price,:description , :created_at 
    belongs_to :subject 
    validates_presence_of :title 
    validates_numericality_of :price, :message=>"Error Message" 
end 

il mio modello di oggetto: subject.rb

class Subject < ActiveRecord::Base 
    attr_accessible :name 
    has_many :book 

end 

traccia dello stack è:

actionpack (3.2.13) lib/action_view/helpers/form_options_helper.rb:364:in `options_from_collection_for_select' 
actionpack (3.2.13) lib/action_view/helpers/form_options_helper.rb:600:in `to_collection_select_tag' 
actionpack (3.2.13) lib/action_view/helpers/form_options_helper.rb:191:in `collection_select' 
app/views/home/newBook.html.erb:19:in `_app_views_home_new_ook_html_erb__299261930_24178164' 
actionpack (3.2.13) lib/action_view/template.rb:145:in `block in render' 
activesupport (3.2.13) lib/active_support/notifications.rb:125:in `instrument' 
actionpack (3.2.13) lib/action_view/template.rb:143:in `render' 
# -- snipped -- 
+2

Se si tratta di RoR, perché taggare con 'java'? – fge

+0

Incolla il codice del controller. –

+0

@fge Nessun tag [tag: java] nella cronologia delle revisioni. (?) – Substantial

risposta

14
<%= collection_select(:book,:subject_id,@subjects,:id,:name) %> 

vostro @subjects è indefinito. Hai bisogno nella vostra azione di controllo per questa pagina qualcosa che imposta il contenuto di quella variabile, ad esempio:

@subjects = Subject.all 

Vedere la fonte per options_from_collection_for_select - prima cosa che fa è una chiamata mappa sulla raccolta passata ad esso (in il tuo caso @subjects).

+0

grazie, sapevo che sarebbe arrivato nulla, ma non lo sapevo come popolare nei binari –

1
<%= collection_select(:book,:subject_id,Subject.all,:id,:name) %> 
+0

grazie per il tuo aiuto –

+1

Prova ad aggiungere spiegazioni per i frammenti di codice. – Matt

+0

È preferibile creare una raccolta nel ** controller **, quindi passarla alla vista in una variabile di istanza, ad es. '@ Subjects'. Chiamare un modello direttamente dalla vista viola il pattern MVC di Rails. – Substantial

Problemi correlati