2016-10-21 3 views
2

Ich habe zwei Spalten in meinem Reminders Modell (date und mail_date), die den Spaltentyp datetime hat, wie Sie in meinem schema.rb sehen:Rails-Konsole angezeigt Nur Datum für Datetime-Spalte

create_table "reminders", force: :cascade do |t| 
    t.string "name" 
    t.datetime "date" 
    t.boolean "reminder",  default: false 
    t.string "repeating" 
    t.boolean "approved" 
    t.boolean "gift",   default: false 
    t.boolean "gift_help",  default: false 
    t.string "occasion_type", default: "Other" 
    t.integer "user_id" 
    t.datetime "created_at",      null: false 
    t.datetime "updated_at",      null: false 
    t.string "slug" 
    t.datetime "mail_date" 
    end 

jedoch in meinem console, werden sie nur als Daten gezeigt:

[33] pry(main)> Reminder.where(name: "Mentor Call") 
    Reminder Load (0.4ms) SELECT "reminders".* FROM "reminders" WHERE "reminders"."name" = ? [["name", "Mentor Call"]] 
=> [#<Reminder:0x007fe32b13f090 
    id: 8, 
    name: "Mentor Call", 
    date: Thu, 27 Oct 2016, 
    reminder: true, 
    repeating: "Weekly", 
    approved: nil, 
    gift: false, 
    gift_help: false, 
    occasion_type: "Other", 
    user_id: 1, 
    created_at: Thu, 13 Oct 2016 01:59:57 UTC +00:00, 
    updated_at: Fri, 21 Oct 2016 23:47:16 UTC +00:00, 
    slug: "mentor-call", 
    mail_date: Thu, 27 Oct 2016>] 

ich weiß, dass die datetime Daten gespeichert werden, weil es auf meiner Ansicht Seite zeigt, wo diese ...

October 27, 2016 07:00 Mentor Call  ... 2016-10-27 07:00:00 UTC 

... wird aus diesem erb generiert:

<% @reminders.each do |o| %> 
    <tr> 
     <td> 
     <%= o.date.try(:to_formatted_s, :long) %> 
     </td> 
     <td> 
     <%= link_to reminder_path(o), style: "color: black" do %> 
      <strong><%= o.name %></strong> 
     <% end %> 
     ... 
     <td> 
     <% if o.reminder %> 
      <%= o.mail_date.try(:to_formatted_s, "%m/%d/%Y") %> 
     <% else %> 
      None, you're on your own. 
     <% end %> 
     </td> 
    </tr> 

ich ein mailer zu schaffen versuchen, die auf mail_date aussendet, aber Probleme habe (glaube ich) aufgrund dieses datetime vs date Problem. Kann mich jemand aufrichten?

+0

Was passiert, wenn Sie rufen Sie die 'date' Spalte etwas anderes, wie' remind_on'? – mysmallidea

+1

@mysmallidea, Sie leben bis zu Ihrem Benutzernamen. Das hat es total repariert. Wenn Sie es als Antwort aufschreiben, werde ich es gerne auswählen. – Liz

Antwort

1

Ich vermute, dass der Name der date Spalte in Konflikt mit Rails oder Rubys reserved words läuft. Ändern Sie den Namen der date Spalte etwas anderes, wie remind_at, und das sollte es tun:

create_table "reminders", force: :cascade do |t| 
    t.string "name" 
    t.datetime "remind_at" 
    t.boolean "reminder",  default: false 
    # ... 
end 
+0

Als allgemeine Konvention verwende ich gerne beschreibende Namen, die mit "_on" für Datumsangaben und "_at" für Datumsangaben enden. Anstatt "mail_date" würde ich 'mailed_at' verwenden. Wenn ich nur das Datum (keine Zeit) wollte, würde ich es "mailed_on" nennen. Das liest sich für mich besser und hilft, den erwarteten Rückgabewert zu informieren, wenn ich (oder andere Entwickler) den Quellcode Monate oder Jahre später lese. – mysmallidea

Verwandte Themen