Ruby создает объект из строки запроса - PullRequest
1 голос
/ 16 февраля 2010

Я использую новый проект 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 hashtable.

Теперь, если я иду по неправильному пути, я хочу использовать строку запроса и найти все ордера, в которых 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 / заказ / показать? 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 & qty = 6

1 Ответ

1 голос
/ 16 февраля 2010

Если вы хотите использовать рельсы, я предлагаю следующее:

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.

...