Basically it just chains on to the previous db query, but still runs a new 
one.. it doesn't query the active record relation object. Also, you cannot 
query an array of objects.. say @products = Product.all ... then say 
@products.where(:color=>"black") .. You will get NoMethodError: undefined 
method `where' for #<Array:0x00000003918108>


On Sunday, November 4, 2012 11:00:29 AM UTC+13, Abram wrote:
>
> Well, it does, but it hits the DB again.
>
> On Sunday, November 4, 2012 10:43:29 AM UTC+13, Abram wrote:
>>
>> When I began learning rails I found it frustrating that array and active 
>> record relation objects could not be queried in the same fashion as 
>> database tables. Before too much confusion let me explain.
>>
>>
>> When I want something from a database table I simply write something 
>> like: Product.where(:color=>'black') NOW, if I put a .to_sql after that 
>> statement I see something like "SELECT \"styles\".* FROM \"styles\" WHERE 
>> \"styles\".\"color\" = 'black'"
>>
>>
>> So clearly, rails is magically converting that friendly statement into 
>> something more meaningful to the backend. That's fantastic and makes my 
>> life wonderful.
>>
>>
>> So here's my problem.. after running the query I am returned an active 
>> record relation, which let's say is called @products. Now, let's say I want 
>> to further break that list of products into products that are big and 
>> small. This would require one of two things.. either I must hit the 
>> database twice being more selective, or I must iterate over @products using 
>> a block and such ruby magic as collect/map/select/etc...
>>
>>
>> To me neither of the above is a great option, and I must admit while 
>> learning ruby on rails this was one of the biggest stumbling blocks for me, 
>> and one that has produced a massive amount of stackoverflow headaches for 
>> many others.
>>
>>
>> My suggestion to rails developers is to make rails more accessible to 
>> beginners by allowing programmers to apply the same simplicity of writing 
>> an active record query to querying an active record relation object or 
>> array of model objects.
>>
>>
>> For example, I want to now take @products and say:
>>
>>
>> @products.where(:size=>"small") and have this converted automagically by 
>> rails to the appropriate statement @products.select{|product| product.size 
>> == 'small'}
>>
>>
>> I suppose this could work if rails were to query the object type first 
>> before performing the query. Is the object type an array or active record 
>> relation, and is it in the expected format (collection of appropriate 
>> objects)? If it is, then treat it as a virtual table and instead of 
>> performing an sql query, hit it with a select block, etc.
>>
>>
>> I know understanding the underlying ruby code is good, and at times would 
>> be preferable to using active record style commands.. but for new users 
>> getting off the ground, I think having both options would be beneficial. 
>> Also, I feel it would be more consistency to the framework generally.
>>
>>
>> I have also posted this at reddit 
>> http://www.reddit.com/r/rails/comments/12kyho/suggestion_for_rails_4_what_are_pros_and_cons/
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-talk/-/qNPHumto-yYJ.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to