1

假设我有两个模型一个业务和一个时间段,关系是business has_many :timeslots. 每个时间段都有一个日期列,其中存储日期名称等'Monday', 'Tuesday'

当我做

bussiness.time_slots

我得到未排序的时间段。我希望时间段按天名排序(不是按字母顺序)。'Monday' 的时间段比 'Tuesday' 排在第一位,依此类推。

我认为 SQL 无法帮助我,因为排序是自定义的,我需要在阅读后进行排序,但我担心将哪些代码放在哪里

我可以做类似的事情

在我的控制器中

b = current_business
TimeSlot.find_sorted_with_busines(b)

在我的时隙模型中

def find_sorted_with_business(b)
   b.time_slots
   # sort timeslots using custom sorting here and return
end

但我不喜欢将业务对象或 id 传递给 TimeSlot 模型的想法,我应该能够做类似的事情

b = current_business
b.sorted_timeslots

我怎样才能做到这一点 ?

也欢迎有关如何根据日名进行自定义排序的想法:)

谢谢

4

2 回答 2

2

您应该考虑在数据库中存储整数而不是日期名称。它会使事情更容易排序,并且可能会更高效。

然后,您可以覆盖daygetter(从整数返回日期名称)和 setter(存储与日期名称对应的整数)。根据您从表单中获得的内容,您可能不必覆盖 setter。

不要忘记进行自定义验证,以检查整数是否在 1 到 7 之间。

于 2012-07-05T18:55:54.847 回答
1

您可以使用 sql 进行自定义排序:

SELECT *
FROM my_table
ORDER BY CASE 
        WHEN dayname = 'Monday' THEN 1
        WHEN dayname = 'Tuesday' THEN 2
        .
        .
        WHEN dayname = 'Sunday' THEN 7
        ELSE 8
     END

但最好的方法是只使用一个 int 作为列类型,如 robin 建议的,然后使用数字来获取日期名称,顺序会更简单

于 2012-07-03T19:19:32.803 回答