Sumowanie danych z bazy

Drugi też musi działać, sprawdź w konsoli co ci to polecenie zwraca.

INT(255) oznacza, że rezultat wyświetli się jako np. (254 spacje)1 albo (251 spacji)1337 (o ile to mysql), więc być może widząc to, railsy traktują to jak stringa.

A czy to przypadkiem nie jest tak, że wszystko co przychodzi z bazy jest Stringiem? W przypadku tabeli, railsy mogą zapytać bazę o definicję kolumny i zastosować później odpowiednią konwersję. W przypadku zapytania z dynamicznie tworzoną kolumną nie ma jak zapytać, więc zostawiają String.

Przynajmniej wartości logiczne z Postgresa zawsze wracają jako Stringi. Przykład: c = User.find_by_sql("SELECT *, false AS czek FROM users LIMIT 1").first.czek; [c.class, c.inspect] #=> [String, "\"f\""] c = User.find_by_sql("SELECT *, cast(false as boolean) AS czek FROM users LIMIT 1").first.czek; [c.class, c.inspect] #=> [String, "\"f\""]
Disclaimer: jasne, od czasów rails 1 sporo się mogło zmienić. odpalcie u siebie i sprawdźcie. A najlepiej jest przegrzebać źródła i znaleźć ostateczną odpowiedź.

Co do wartości logicznych, w postgresie one są trzymane jako stringi, więc wcale mnie to nie zaskakuje :wink: Sprawdź na jakichś integerach lepiej.

Integery tak samo: c = User.find_by_sql("SELECT *, 12 AS czek FROM users LIMIT 1").first.czek; [c.class, c.inspect] #=> [String, "\"12\""]

Wydaje mi się że jest problem gdzieś w kontrolerze, pewnie mam gdzieś błąd.
W klients_controller.rb

class KlientsController < ApplicationController
@wynik = Klient.sum('price')
  # GET /klients
  # GET /klients.xml
...

w widoku

<%= @wynik.inspect %>

Wyświetla nil

c = User.find_by_sql("SELECT *, 12 AS czek FROM users LIMIT 1").first.czek; [c.class, c.inspect] => [Fixnum, "12"]
mysql2, rails 3

[quote=katafrakt] c = User.find_by_sql("SELECT *, 12 AS czek FROM users LIMIT 1").first.czek; [c.class, c.inspect] => [Fixnum, "12"]
mysql2, rails 3[/quote]
W jaki sposób to zastosować? dodać ? W kontrolerze?

Nie, nie, to była odpowiedź na post Arsena7. Sorry, nie zauważyłem, że coś w międzyczasie napisałeś.