I have Order model and Order.all
returns below.
[
[0] #<Order:0x007f9d9e236de0> {
:id => 15,
:user_id => 2,
:artist_id => nil,
:address_id => 18,
:paid_at => nil,
:payment_type => "bank",
:guid => "c8e22764774adc6825348b8874b581e8",
:created_at => Mon, 24 Aug 2015 19:42:09 JST +09:00,
:updated_at => Mon, 24 Aug 2015 19:45:38 JST +09:00,
:ordered_at => Mon, 24 Aug 2015 19:45:37 JST +09:00,
:total => 43890
},
[1] #<Order:0x007f9d9e2367a0> {
:id => 12,
:user_id => 2,
:artist_id => nil,
:address_id => 18,
:paid_at => nil,
:payment_type => "bank",
:guid => "274b4a8653395023125a4724139efc09",
:created_at => Mon, 24 Aug 2015 19:10:38 JST +09:00,
:updated_at => Mon, 24 Aug 2015 19:41:25 JST +09:00,
:ordered_at => Mon, 24 Aug 2015 19:41:22 JST +09:00,
:total => 48689
},
[2] #<Order:0x007f9d9e236318> {
:id => 11,
:user_id => 2,
:artist_id => nil,
:address_id => 14,
:paid_at => Mon, 24 Aug 2015 19:10:38 JST +09:00,
:payment_type => "credit_card",
:guid => "b075f4a6f31c32942152f7d50d2bd098",
:created_at => Mon, 24 Aug 2015 19:03:39 JST +09:00,
:updated_at => Mon, 24 Aug 2015 19:10:38 JST +09:00,
:ordered_at => Mon, 24 Aug 2015 19:10:38 JST +09:00,
:total => 5010
},
[3] #<Order:0x007f9d9e235e40> {
:id => 10,
:user_id => nil,
:artist_id => nil,
:address_id => nil,
:paid_at => nil,
:payment_type => nil,
:guid => "916ff17977cb176c5e5740faab92a08c",
:created_at => Sat, 22 Aug 2015 19:30:38 JST +09:00,
:updated_at => Sat, 22 Aug 2015 19:30:38 JST +09:00,
:ordered_at => nil,
:total => 0
},
[4] #<Order:0x007f9d9e2356c0> {
:id => 9,
:user_id => 1,
:artist_id => nil,
:address_id => 9,
:paid_at => nil,
:payment_type => "bank",
:guid => "a4f1dd11ad035d1747a37776b062021f",
:created_at => Sat, 22 Aug 2015 19:30:04 JST +09:00,
:updated_at => Tue, 01 Sep 2015 00:00:09 JST +09:00,
:ordered_at => Sat, 22 Aug 2015 00:00:00 JST +09:00,
:total => 5010
},
[5] #<Order:0x007f9d9e2342c0> {
:id => 8,
:user_id => 1,
:artist_id => nil,
:address_id => 9,
:paid_at => Thu, 20 Aug 2015 19:30:04 JST +09:00,
:payment_type => "credit_card",
:guid => "b816503b6b95d35455262cd4d8b9e822",
:created_at => Sat, 22 Aug 2015 19:30:04 JST +09:00,
:updated_at => Sat, 22 Aug 2015 19:30:04 JST +09:00,
:ordered_at => Wed, 19 Aug 2015 19:30:04 JST +09:00,
:total => 0
}
]
However, Order.sum(:total)
returns
Order.sum(:total)
(0.4ms) SELECT SUM("orders"."total") FROM "orders"
12000
and Order.pluck(:total)
returns
Order.pluck(:total)
CACHE (0.0ms) SELECT "orders"."total" FROM "orders" ORDER BY "orders"."created_at" DESC
[
[0] nil,
[1] nil,
[2] nil,
[3] nil,
[4] 2000,
[5] 10000
]
So, what happened? How can I get correct value?
Thanks many comments.
I have default scope, but only order,
default_scope { order(created_at: :desc) }
. Is this affect this probrem??
This is 'Order.all' query.
Order Load (1.0ms) SELECT "orders".* FROM "orders" ORDER BY "orders"."created_at" DESC
Item Load (0.4ms) SELECT "items".* FROM "items" WHERE "items"."order_id" = $1 [["order_id", 20]]
Flower Load (0.7ms) SELECT "flowers".* FROM "flowers" WHERE "flowers"."type" IS NULL AND "flowers"."item_id" = $1 ORDER BY "flowers"."created_at" ASC LIMIT 1 [["item_id", 8]]
Order.all.map(&:total)
returns
[ [ 0] 43890, [ 1] 48689, [ 2] 5010, [ 3] 0, [ 4] 5010, [ 5] 0 ]
sorry for the delay in reply...
This is my result for orders.html.erb, and I use only myapp_development and myapp_test databases.
Order.count 6
Order.sum(:total) 12,000
Order.pluck(:total) [nil, nil, 2000, 10000, nil, nil]
Order.all.map(&:total) [0, 5010, 0, 0, 16110, 0]
#<Order id: 6, user_id: 1, artist_id: nil, address_id: nil, paid_at: nil, payment_type: nil, guid: "a6471c15680a0fbcd3f515a1bdf83566", created_at: "2015-09-02 07:24:37", updated_at: "2015-09-02 07:24:37", ordered_at: nil, total: nil, conveni_name: nil, conveni_code: nil, invoice_id: nil>
#<Order id: 5, user_id: 1, artist_id: nil, address_id: 14, paid_at: "2015-09-02 07:24:36", payment_type: 0, guid: "b68989c73bc0af34e3eef56abbcb306c", created_at: "2015-09-01 08:58:07", updated_at: "2015-09-02 07:24:36", ordered_at: "2015-09-02 07:24:36", total: nil, conveni_name: nil, conveni_code: nil, invoice_id: nil>
#<Order id: 4, user_id: 1, artist_id: nil, address_id: 1, paid_at: nil, payment_type: 2, guid: "1863cc6f2884b88598c4524d564b8a4a", created_at: "2015-09-01 06:07:52", updated_at: "2015-09-01 06:07:52", ordered_at: "2015-08-31 15:00:00", total: 2000, conveni_name: nil, conveni_code: nil, invoice_id: nil>
#<Order id: 3, user_id: 1, artist_id: nil, address_id: 1, paid_at: "2015-08-30 06:07:52", payment_type: 0, guid: "a6f7e22fc9ea8bdccdbdcbb00d9ea250", created_at: "2015-09-01 06:07:52", updated_at: "2015-09-01 06:07:52", ordered_at: "2015-08-29 06:07:52", total: 10000, conveni_name: nil, conveni_code: nil, invoice_id: nil>
#<Order id: 2, user_id: 1, artist_id: nil, address_id: 11, paid_at: "2015-09-01 08:58:06", payment_type: 0, guid: "f29dd23315078fce2e5b38e16d027c45", created_at: "2015-09-01 06:06:33", updated_at: "2015-09-01 08:58:06", ordered_at: "2015-09-01 08:58:06", total: nil, conveni_name: nil, conveni_code: nil, invoice_id: nil>
#<Order id: 1, user_id: nil, artist_id: nil, address_id: nil, paid_at: nil, payment_type: nil, guid: "6f2ffd0e8ba491fba10d69b73e717384", created_at: "2015-09-01 03:08:44", updated_at: "2015-09-01 03:08:44", ordered_at: nil, total: nil, conveni_name: nil, conveni_code: nil, invoice_id: nil>
Information you provide is contradictory.
I think you look at different databases.
Let me explain why I think so.
Fact #1 Based on Order.all
output we have:
#<Order id: 15, total: 43890.0>
#<Order id: 12, total: 48689.0>
#<Order id: 11, total: 5010.0>
#<Order id: 10, total: 0.0>
#<Order id: 9, total: 5010.0>
#<Order id: 8, total: 0.0>
total
attribute here is identical to what is written in database. Even if you have method with the same name defined in Order
model, this attribute should not be affected by it.
Fact #2 Based on Order.pluck(:total)
output we have:
#<Order id: 15, total: nil>
#<Order id: 12, total: nil>
#<Order id: 11, total: nil>
#<Order id: 10, total: nil>
#<Order id: 9, total: 2000>
#<Order id: 8, total: 10000>
Again, total
attribute here is identical to what is written in database. And again it's not affected by methods defined in your model.
Now we see Fact 1 contradicts Fact 2. I'm almost sure you are looking at different databases here.
The best way to be sure that you don't get contradictory results is to create a new page with this content inside:
<!-- orders.html.erb -->
<table>
<tr>
<td>Order.count</td>
<td><%= Order.count %></td>
</tr>
<tr>
<td>Order.sum(:total)</td>
<td><%= number_with_delimiter Order.sum(:total) %></td>
</tr>
<tr>
<td>Order.pluck(:total)</td>
<td><%= Order.pluck(:total) %></td>
</tr>
<tr>
<td>Order.all.map(&:total)</td>
<td><%= Order.all.map(&:total) %></td>
</tr>
</table>
<% Order.all.each do |o| %>
<p>
<code><%= o.inspect %></code>
</p>
<% end %>
and give us output from this page for further exploration.
Basically what I ask for:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With