Thanks. So much magic, so many dangerous wands lying around.

So is there a gem or other tool to scan a Rails project for problems of 
this sort?


On Monday, February 2, 2015 at 6:42:58 PM UTC-5, Scott Olmsted wrote:
>
> A Rails 4.2 app has a table with about a dozen fields. Two have similar 
> names:
>
>     create_table :transactions do |t|
>       ...
>       t.decimal     :shares, precision: 12, scale: 5
>       ...
>       t.decimal     :shares_change, precision: 12, scale: 5
>       ...
>    end
>
> In tests the code assigns a scalar such as 12.4 or BigDecimal("12.4") to 
> shares_change, but a puts statement shows that it has been set to an array 
> (first element nil, second element a BigDecimal). Later puts statements 
> just show it as nil.
>
> Here's a snippet:
>
>   self.shares_change = -self.shares
>   puts ">>>>> 2 /compute_shares_change/  self.shares=#{self.shares} 
>  self.shares_change=#{self.shares_change}"
>
> and the output:
>
> * >>>>> 2 /compute_shares_change/  self.shares=31.0  
> self.shares_change=[nil, #<BigDecimal:7f7fe3ba9158,'0.31E2',9(36)>]*
> But if I change the name of the first field to 'sharez' or move the 
> declaration of the 'shares' field to right after the 'shares_change' field 
> in the migration, the problem goes away:
>
> *  >>>>> 2 /compute_shares_change/  self.shares=31.0  
> self.shares_change=-31.0*
>
> This happens with SQLite and with MySQL (version 5.1.58). It happens 
> whether I use a factory (I'm using Fabrication in Minitest) to create the 
> Transaction object or not. In all cases the declaration changes fix the 
> problem.
>
> ActiveRecord bug? Just wondered if anyone else has encountered this.
>
> Thanks,
>
> Scott
>
>
>

-- 
-- 
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
--- 
You received this message because you are subscribed to the Google Groups "SD 
Ruby" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to