Ruby从查询字符串创建一个对象

时间:2010-02-16 06:10:36

标签: ruby-on-rails ruby query-string

我正在使用一个新的Rails项目&旧的已建立的Oracle数据库使用适配器:oracle_enhanced。希望能够对数据库进行动态搜索,具体取决于可用于搜索的信息/字段。

我想从

获得
http://www.abc.com/order/show?acct_num=a123&po_num=789z

并创建一个对象,例如

class Order
  attr_reader :customer_name, :acct_num, :order_date, :po_num, :qty.
end

我有来自 request.query_parameters 哈希表的参数。

现在,如果我走错路径,我想要做的是使用查询字符串,并能够找到所有订单,其中acct_num_in_model = acct_num_from_query_string和po_num_from_model = po_num_from_query_string等。如果某些东西是空的,例如po_number则返回全部与acct_number匹配,如果acct_num为空,则匹配该po。我期待以下内容:

abc.com/order/show?acct_num=a123&po_num=789z

使用acct_num = a123和po_num = 789z

返回所有订单

abc.com/order/show?acct_num=a123 使用acct_num = a123

返回所有订单
abc.com/order/show?po_num=789z

使用po_num = 789z

返回所有订单
abc.com/order/show?po_num=789z&qty=6

使用po_num = 789z&返回所有订单数量= 6

1 个答案:

答案 0 :(得分:1)

鉴于你想使用rails,我建议:

QUERY_WHITELIST = ['po_num','qty','acct_num']
Order.find :all, :conditions => params.slice(*QUERY_WHITELIST)

QUERY_WHITELIST = ['po_num','qty','acct_num']
Order.all :conditions => params.slice(*QUERY_WHITELIST)

取决于您的Rails版本。