I have been working with Ruby for a short time, and today I came across this problem while working on a calendar for submitting requests. I spent time searching for various undefined method error documents in stackoverflow, ruby ββguides, etc., as well as viewing strftime. I found a solution that partially solved my problem with try, but now it doesnβt actually pass strftime through the on-demand display, even though the rails server picks it up in the message. I can go well to my calendar and click the "New request" button, fill out the form, but when I go to this form, browsers give me this:
undefined method `strftime' for nil:NilClass Extracted source (around line #3): 1: <h1><%= @vacationrequest.request_name %></h1> 2: 3: <p class="info">Requested For <%= @vacationrequest.request_date.strftime("%B %e, %Y") %></p> 4: 5: <%= simple_format @vacationrequest.message %> 6:
And I get this error on the Rails server:
Started GET "/vacationrequests/1" for 127.0.0.1 at 2012-10-17 15:18:14 -0400 Processing by VacationrequestsController#show as HTML Parameters: {"id"=>"1"} β[1mβ[35mVacationrequest Load (0.0ms)β[0m SELECT "vacationrequests".* FROM "v acationrequests" WHERE "vacationrequests"."id" = ? LIMIT 1 [["id", "1"]] Rendered vacationrequests/show.html.erb within layouts/application (15.6ms) Completed 500 Internal Server Error in 31ms ActionView::Template::Error (undefined method strftime' for nil:NilClass): 1: <h1><%= @vacationrequest.request_date %></h1> 2: 3: <p class="info">Requested For <%= @vacationrequest.request_date.strftime( "%B %e, %Y") %></p> 4: 5: <%= simple_format @vacationrequest.message %> 6: app/views/vacationrequests/show.html.erb:3:inapp_views_vacationrequests_sho w_html_erb_217743956_18446544'
This is my view:
<h1><%= @vacationrequest.request_name %></h1> <p class="info">Requested For <%= @vacationrequest.request_date.strftime("%B %e, %Y") %></p> <%= simple_format @vacationrequest.message %> <p> <%= link_to "Edit Request", edit_vacationrequest_path(@vacationrequest) %> | <%= link_to "Back to Requests", vacationrequests_path %> </p>
and it is _form that the user places the request information in:
<%= form_for @vacationrequest do |f| %> <% if @vacationrequest.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@vacationrequest.errors.count, "error") %> prohibited this request from being saved: if this continue to happens please email the error to alex@allsafeindustries.com </h2> <ul> <% @vacationrequest.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :request_name %><br /> <%= f.text_field :request_name %> </div> <div class="field"> <%= f.label :request_date %><br /> <%= f.text_field :request_date %> </div> <div class="field"> <%= f.label :message %><br /> <%= f.text_area :message %> </div> <div class="actions"> <%= f.submit %> </div> <% end %>
Finally, here are my show and index methods in my controller:
def index @vacationrequests = Vacationrequest.all @vacationrequests_by_date = @vacationrequests.group_by(&:request_date) @date = params[:date] ? Date.parse(params[:date]) : Date.today end def show @vacationrequest = Vacationrequest.find(params[:id]) end
Can someone direct me to what is inappropriate or why is it zero? Thanks.
In response to the answer, this is what I now get from the server:
Started POST "/vacationrequests" for 127.0.0.1 at 2012-10-17 20:18:00 -0400 Processing by VacationrequestsController#create as HTML Parameters: {"utf8"=>"β", "authenticity_token"=>"E1+xXP0pAIQpwMZruswxIZIrTZB3b c3NlW3iRv9OLqU=", "vacationrequest"=>{"request_name"=>"One more time", "request_ date"=>"10/31/2012", "message"=>"Lucky number 7?"}, "commit"=>"Create Vacationre quest"} β[1mβ[35m (0.0ms)β[0m begin transaction β[1mβ[36mSQL (15.6ms)β[0m β[1mINSERT INTO "vacationrequests" ("created_at", " message", "request_date", "request_name", "updated_at") VALUES (?, ?, ?, ?, ?)β[ 0m [["created_at", Thu, 18 Oct 2012 00:18:00 UTC +00:00], ["message", "Lucky nu mber 7?"], ["request_date", nil], ["request_name", "One more time"], ["updated_a t", Thu, 18 Oct 2012 00:18:00 UTC +00:00]] β[1mβ[35m (109.2ms)β[0m commit transaction Redirected to http://localhost:3000/vacationrequests/7 Completed 302 Found in 125ms (ActiveRecord: 124.8ms) Started GET "/vacationrequests/7" for 127.0.0.1 at 2012-10-17 20:18:01 -0400 Processing by VacationrequestsController#show as HTML Parameters: {"id"=>"7"} β[1mβ[36mVacationrequest Load (0.0ms)β[0m β[1mSELECT "vacationrequests".* FRO M "vacationrequests" WHERE "vacationrequests"."id" = ? LIMIT 1β[0m [["id", "7"] ] Rendered vacationrequests/show.html.erb within layouts/application (15.6ms) Completed 500 Internal Server Error in 16ms ActionView::Template::Error (undefined method `strftime' for nil:NilClass): 1: <h1><%= @vacationrequest.request_name %></h1> 2: <%= debug @vacationrequest %> 3: <p class="info">Requested For <%= @vacationrequest.request_date.strftime( "%B %e, %Y") %></p> 4: 5: <%= simple_format @vacationrequest.message %> 6: app/views/vacationrequests/show.html.erb:3:in `_app_views_vacationrequests_sho w_html_erb___377763931_36688344'
I also used view debugging and checked my schema, and all the attributes seemed to line up correctly.
As for the request in the comments, here is my Vacationrequest model:
class Vacationrequest < ActiveRecord::Base attr_accessible :message, :request_name, :request_date end
Once again I can not thank you for your help.
Here is the diagram:
ActiveRecord::Schema.define(:version => 20121016194123) do create_table "vacationrequests", :force => true do |t| t.string "request_name" t.date "request_date" t.text "message" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end end
and the controller creation action code:
def create @vacationrequest = Vacationrequest.new(params[:vacationrequest]) if @vacationrequest.save redirect_to @vacationrequest, notice: "Created Request!" else render :new end end
As I look at this, part of the problem is that my circuit is plural and my controller is the only one? Thanks again.