如何在ruby where语句中使用动态变量作为符号

时间:2014-12-10 19:50:55

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord

我不知道如何解决这个问题。

我遇到过这个问题3次,每次我把它放在我的待办事项列表中,但即便如此,我也试图找到解决方案。

例如,

我正在尝试使用此示例的动态变量创建查询;

User.search(first_name_start:' K')

这个例子中有3个参数;

1)first_name - 我的模型属性 2)开始 - 查询类型(开始/结束/续) 3)' 3' - 值

我能够使用静态符号创建动态ActiveRecord,但我想如何进行动态输入

提前致谢

编辑:附加信息

让我给你看一些伪代码

    varArray.each_with_index |x,index|

    queryString=varArray[i]+"_"+filterArray=[i] #lets say varArray[i], this will be first_name, an actual model attribute/a column in my db 
#and filterArray like /start/end/with a filter type
#and finally valArray a string value like  'geo' or 'paul'
User.where(queryString valArray[i]).result 

我尝试使用send(变量),但这也没有帮助我,所以我不应该如何继续,

1 个答案:

答案 0 :(得分:2)

这是用于定义哈希的新花式Ruby 1.9语法不会削减它的少数情况之一。您必须使用传统的hashrocket(=>),它不仅可以指定符号,还可以指定任意值作为哈希键:

column = "#{first_name}_size_#{query_type}".to_sym
User.where( column => value )

AFAIK,ActiveRecord能够接受字符串而不是符号作为列名,因此您甚至不需要致电to_sym