我有Sql Query:
@orders = Order.find(
:all,
:include => [[:shipping_addresses => :state], :order_status, :order_financial_status],
:order => 'orders.id DESC',
:select => ['orders.id, orders.created_at, orders.est_shipping_date, orders.order_contents_count, orders.pdf_filename, order_status.name, order_financial_status.name, shipping_addresses.state_abbr']
)
这是Rails 2.0.2 SQL查询这个sql fetch all recored from database table" Order"并使用外键来获取其他数据,如送货地址。
我正在尝试将此相同的查询转换为rails 4.1.5操作记录查询。
Order.order("orders.id DESC")
这给了我订单清单,但我想知道我能处理谁:包括和:选择部分
答案 0 :(得分:0)
你可以用这种方式编写代码,它可以在Rails< 4以及:
orders = Order.
includes(table_names).
order(order_columns).
select(select_columns).
all
另外,仅供参考:
select
条款并不像你想要的那样工作。澄清:
Order.includes(:order_status).select("orders.id")
不会申请任何joins
。然而
Order.includes(:order_status).select("orders.id, order_statuses.id")
无法应用您想要的select
。
对于现有代码的最小更改,您只需删除select
子句,因为它可能无论如何都无法正常工作。
或者,如果您对所需的后续更改感到满意,则可以使用以下内容:
orders = Order.
joins(:order_status). # add more tables & columns like you want
select("orders.id, order_statuses.name AS order_status_name")
然后您将只获得指定的列。但是,您必须像这样访问order_status_name:
orders.first.order_status_name # instead of orders.first.order_status.name
你去。