我有一个参数就像params[:time_range]
。
在我的控制器中,我想使用这个时间范围参数在我的查询中指定一个特定的范围如下所示:
# params[:time_range] = "week"
time = params[:time_range]
query = Article.where(created_at: 1.#{time}.ago)
现在这样肯定不行。
是否有方法将params[:time_range]
字符串转换为月,日或周的类型?
我试图使用to_sym
,但week
的东西不是一个符号。当我试图找到它的类与1.week
我得到Fixnum
。
有人知道解决这个问题的方法吗?
使用send
动态调用ruby中的方法。
1.send(time).ago
但是要小心,你的用户可以用你这样做的方式调用对象上的任何方法,你应该在此之前对它进行消毒。
的例子:
time = 'day' unless ['day', 'month', 'year', 'week'].include? time