Ruby& Rails - 将字符串转换为Proc

时间:2011-03-13 14:20:27

标签: javascript jquery ruby-on-rails ruby ajax

我遇到以下情况。当前网址如下所示:

/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以便对数组进行排序。有谁知道我是如何做到这一点的?

非常感谢任何帮助!

3 个答案:

答案 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>