-1
我有一个名为Retreat的Rails模型 Retreat与模型实例具有has_many关联,因此Retreat具有多个实例,实例属于Retreat。使用关联模型上的属性来订购Rails模型
这里有两个模式:
create_table "instances", force: :cascade do |t|
t.date "date"
t.string "venue"
t.string "schedule"
t.decimal "price", precision: 8, scale: 2
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "retreat_id"
t.index ["retreat_id"], name: "index_instances_on_retreat_id"
end
create_table "retreats", force: :cascade do |t|
t.string "title"
t.string "tagline"
t.string "type_of"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "description"
t.string "schedule"
t.boolean "available", default: false
end
我想订购的最直接的实例的日期方面退却模型(即是最接近今天实例的日期)。如果撤退没有实例,则按照顺序排列。
我该怎么做?
编辑#1:
这是怎么了,我终于做到了:
def Retreat.order_by_upcoming(order='asc')
if order == 'asc'
Retreat.find_by_sql("select retreats.* from retreats left outer join \
(select retreats.title, min(instances.date) as upcoming,
count(instances.date) from retreats left outer join instances on
retreats.id = instances.retreat_id where
instances.date >= '#{Date.today}' group by retreats.title) as s on \
retreats.title = s.title order by case when s.upcoming is null then 1
else 0 end, s.upcoming, retreats.title")
elsif order == 'desc'
Retreat.find_by_sql("select retreats.* from retreats left outer join \
(select retreats.title, min(instances.date) as upcoming,
count(instances.date) from retreats left outer join instances on
retreats.id = instance s.retreat_id where
instances.date >= '#{Date.today}' group by retreats.title) as s on \
retreats.title = s.title order by s.upcoming desc, retreats.title")
end
end
可能有更好的方法来做到这一点。
实例有一个日期字段。我希望由日期字段排序而不是由created_at字段排序。因为,撤退可能有很多事件,因此有许多日期。我想要在距离“今日”最近的日期订购所有撤退。 – dhaliman
然后使用'date'而不是'created_at',我将更新 –
这不起作用。务虚会根本没有得到订单。 – dhaliman