我遇到以下情况。当前网址如下所示:
/categories/Art
我正在使用name = location.pathname.split('/')[2]
来获取网址的Art
部分。然后,我将以下路径发送回控制器:http://localhost:3000/sort?sortMethod=name&category=name
或日期,无论点击哪个链接。
现在在我的控制器中我可以使用sort = params[:category]
来获取字符串name
,但是我想用这个字符串做的是按它排序一个数组。 @categories
是一个对象数组,我想调用.sort_by(&:sort)
但它无法识别sort = name
的字符串值。所以现在我想将此字符串转换为proc以便对数组进行排序。有谁知道我是如何做到这一点的?
非常感谢任何帮助!
答案 0 :(得分:2)
首先将其转换为符号,然后使用Symbol#to_proc:
@categories.sort_by(&sort.to_sym)
但请确保用户不能在您的对象上调用任何恶意内容,例如:
http://localhost:3000/sort?sortMethod=destroy
保护自己的一种方法是在模型中使用attribute_accessible
定义,然后执行
@categories.sort_by(&sort.to_sym) if Category.accessible_attributes.include? sort.to_sym
答案 1 :(得分:0)
问题并不完全清楚,因此您可能需要调整以下解决方案。但是,基本的想法是可以做类似的事情:
Category.all.sort_by {|category| category.method(params[:category]).call }
答案 2 :(得分:0)
此外,您的网址的“艺术”部分在Rails的参数哈希中可用作参数[:action],因此您无需执行location.pathname.split('/')[2]。< / p>