我无法从我的数据库中提取事件日期以按正确的顺序呈现。我在我的 simple_form 中使用 bootstrap-datepicker 供用户使用。我的事件 Controller 目前是:
```def index
@events = Event.order(start_date: :asc).where('start_date::date >= CURRENT_DATE')
end```
事件确实以正确的日期呈现到页面,但它们似乎只按月排序而忽略了年份。例如,2021 年 1 月发生的事件将列在 2020 年 3 月上方,因为 1 月在 3 月之前。
我试过寻找 ruby 中的 order 方法如何工作以及搜索其他帖子,但我没有成功。有什么想法吗?
日志:
```Started GET "/events" for ::1 at 2019-11-25 10:26:28 -0800
Processing by EventsController#index as HTML
Rendering events/index.html.erb within layouts/application
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
↳ app/views/events/index.html.erb:10
Event Load (0.3ms) SELECT "events".* FROM "events" WHERE (start_date::date >= CURRENT_DATE) ORDER BY "events"."start_date" ASC
↳ app/views/events/index.html.erb:27
Rendered events/index.html.erb within layouts/application (4.4ms)
Completed 200 OK in 174ms (Views: 171.2ms | ActiveRecord: 0.6ms)```
应用程序.js:
```//= require rails-ujs
//= require activestorage
//= require jquery
//= require jquery_ujs
//= require popper
//= require tether
//= require bootstrap-sprockets
//= require_tree .
//= require bootstrap-datepicker
$(function() {
$('input.datepicker').data({behaviour: "datepicker"}).datepicker();
});```
简单形式:
```<div class="event-box col-5 offset-3">
<br/>
<h1 align="center" style="font-size: 25px;">Create New Event</h1>
<%= simple_form_for @event do |f| %>
<%= f.input :title %>
<%= f.input :start_date, as: :string, input_html: { class: "datepicker" }%>
<%= f.input :end_date, as: :string, input_html: { class: "datepicker" }%>
<%= f.input :location %>
<%= f.input :details %>
<br />
<div align="center">
<%= f.submit 'Create', class: 'btn btn-primary' %>
</div>
<% end %>
<br/>
</div>
<script>
$('#datepicker').datepicker({format: 'mm-dd-yyyy'});
</script>```
事件表:
```create_table "events", force: :cascade do |t|
t.string "title"
t.string "start_date"
t.string "end_date"
t.string "location"
t.text "details"
t.integer "event_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "event"
t.index ["event_id"], name: "index_events_on_event_id"
end```
最佳答案
这里的问题是 start_date
被保存为字符串而不是时间。当您尝试按字符串排序时,它只是按字母顺序排列输出,因此一月份的所有内容都组合在一起。
如果你改变:
t.string "start_date"
到:
t.date_time "start_date"
它应该可以工作。您显然必须迁移现有数据。
关于ruby-on-rails - 如何从我的应用程序数据库中正确排序日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59037908/