Undefined `map 'method for nil: NilClass, what causes this?

Hi, I am encountering this error, completely new to rails, so I canโ€™t understand what causes it.

my 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> 

my book model: 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 

my topic: subject.rb

 class Subject < ActiveRecord::Base attr_accessible :name has_many :book end 
Stack trace

:

 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 -- 
+6
source share
2 answers
 <%= collection_select(:book,:subject_id,@subjects,:id,:name) %> 

The @subjects object @subjects undefined. You need the contents of this variable to be set for this page in your control action, for example:

 @subjects = Subject.all 

See the source options_from_collection_for_select - the first thing he does is call the map in the collection passed to him (in your case @subjects ).

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

Source: https://habr.com/ru/post/946672/


All Articles