Ruby undefined method `strftime' for nil:NilClass

Ich habe nur die Arbeit mit Ruby für eine kurze Zeit, und ich habe eine Wand schlagen heute während der Arbeit auf einem Kalender zu put-Anfragen auf. Ich verbrachte Zeit mit der Suche durch die verschiedenen undefinied method error-Dokumente auf stackoverflow, das ruby-guides, etc. suchen sowie in strftime. Ich habe eine Lösung gefunden, die teilweise mein problem gelöst mit versuchen, aber jetzt ist es nicht tatsächlich an der strftime durch zeigen auf die Anfrage, auch wenn Sie den rails-server, hob es in die post. Ich kann meine Kalender-Ordnung, und drücken Sie die neue Schaltfläche Antrag, das Formular ausfüllen, aber wenn ich auf post, die form, die der Browser gibt mir diese:

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: 

Und ich bekomme diese Fehlermeldung auf dem 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'

Dies ist mein show-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>

- und dies ist die _form, dass der Nutzer legt die Anforderung Informationen 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 %>

Schließlich sind hier meine Karte-und index-Methoden in meinem 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

Kann jemand mir direkt auf, was der nicht am Platz ist oder warum ist das null? Danke.

In Reaktion auf die Antwort hier ist, was ich bin jetzt immer vom 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'

Ich habe auch die debug-Ansicht und überprüft mein System und alle Attribute Schienen zu line-up richtig.

Als für die Anfrage in die Kommentare hier ist meine Vacationrequest Modell:

class Vacationrequest < ActiveRecord::Base
  attr_accessible :message, :request_name, :request_date
end

Wieder ich kann Ihnen nicht genug danken für Ihre Hilfe.

Hier ist das schema:

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

- und der create-controller-action-code:

def create
  @vacationrequest = Vacationrequest.new(params[:vacationrequest])
  if @vacationrequest.save
    redirect_to @vacationrequest, notice: "Created Request!"
  else
    render :new
  end
end

So, ich bin bei dieser Suche, ist ein Teil des Problems meinem schema als plural und mein controller being singular? Nochmals vielen Dank.

  • Das problem ist, dass @vacationrequest.request_date null aus irgendeinem Grund. Können Sie nach dem code für die Vacationrequest Modell?
  • Ich fügte hinzu, in der server-Fehler-Ausgabe und checkte mein schema mit dem Attribut debug-Informationen. Das Modell wurde ebenso Hinzugefügt.
  • Sicher genug, das problem ist nicht passiert, wenn Sie die Anzeige der Aufzeichnung aber, wenn Sie es speichern. Kannst du dein db-schema und create controller-action-code?
  • Ich habe es unter dem vorherigen edit. Ich habe bemerkt, dass mein schema ist plural und mein controller nutzt in Erster Linie einzigartige syntax. Ich bin mir nicht sicher, ob das einen Unterschied machen. Nochmals danke, ich Schätze es wirklich.
  • Die plural/singular-Formen sind kein problem, das ist die Konvention in rails. Ich sehe nicht das problem aber ich schau ein bisschen mehr in Sie später.
  • Eine Sache: Sie sollten wahrscheinlich hinzufügen einer Prüfung auf Ihr Modell, wenn Sie wollen, stellen Sie sicher, dass ein Datum eingegeben wird, wenn ein neuer Datensatz erstellt wird. Versuchen Sie, eine Zeile in Ihrem Vacationrequest Modell: validates :request_date, :presence => true und dann versuchen, die Schaffung einen neuen Urlaub beantragen. Sollten Sie eine Fehlermeldung erhalten.
  • Ich dachte, es war die convention, aber ich bin noch neu genug, um zu zweifeln 🙂 ich will gerne hinzufügen, der validator. Danke.
  • Also ich habe in der Prüfung und bekam diese Fehlermeldung: Anfrage Datum kann nicht leer sein. Aber in dem code oben mein server zeigt die request_date in die POST-Parameter, so dass sich etwas Versagen zwischen der POST und sparen, weil wenn ich Vacationrequest.find(id) kann ich eigentlich sehen Vacationrequest mit request_date:nil und alles andere gespeichert. Irgendwelche Tipps oder Anregungen würde sehr geschätzt werden, ich werde die Suche zu starten jetzt. Nochmals vielen Dank.

InformationsquelleAutor Alexander | 2012-10-17
Schreibe einen Kommentar