将Rails 2.0.2 activerecord查询转换为rails 4.1.5 Rails操作记录

时间:2014-12-21 10:37:33

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-2

我有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")

这给了我订单清单,但我想知道我能处理谁:包括和:选择部分

1 个答案:

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

你去。