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 dieVacationrequest
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Happy Coding !
Update
In der neueren version von Ruby, die Sie verwenden können
&.
->lonely operator
statt die Lösung vor.@vacationrequest.request_date
ist null, so dass der Datensatz, den Sie suchen, fehlt dem Antrag das Datum. Es klingt wie Sie haben falsche Daten. In dieser situation würde ich debug-warum von:@vacationrequest
im view --<%= debug @vacationrequest %>
(oder von Ihrem controller:fail @vacationrequest.inspect
).rails c
) -- was machtVactionrequest.find(some_id)
Ertrag?Jedoch sind Sie die Eingabe Ferien-Anfragen nicht speichern-Anfrage stammt, so gibt es wahrscheinlich ein Fehler in Ihren
create
controller-action-Modell schema-oder Modell-Validierung.request_date
ist null. Wie sindVacationrequest
Objekte erstellt und gespeichert?@vacation_req.try(:strftime, "arguments")
, aber es ist besser zu Adresse null Probleme in Ihrem Modell oder controller (IMO).Shioyama ich danke Ihnen so sehr für die Annahme dieses:
überprüft :request_date, :presence => true
Ich wirklich, die Zeit zu investieren in das lernen über das debugging und die Validierung Schienen fördert. Weil dieser dachte ich speziell, dass der datepicker in JQuery nicht vorbei, durch korrekt. Ich ging in meine assests > javascript > vacationrequests.js.Kaffee und fand, ich hatte Links () am Ende wie folgt:
Einmal entfernte ich die Klammern wie hier:
Alles funktioniert, Index, Show, Edit, Update, New. Vielen Dank auch für alle Anregungen und zeigt mir wie diese laufen nach unten.