Are there any rationalies to make queries obtained by joining scope to be 
readonly? I read some old posts (pre-rails3) that joins adds additional 
columns to record so that ActiveRecord doesn't know how to update that 
fields, but actually I don't see that fields. For example I write model
class Order < ActiveRecord::Base
  has_and_belongs_to_many :executors, class_name: 'Specialist', join_table: 
'order_executors'
  scope :by_executor, ->(executor_id) { 
joins(:executors).where(specialists: {id: executor_id} ) }
end

and make query Order.by_executor(1) so that I get:

Order Load (2.0ms)  SELECT "orders".* FROM "orders" INNER JOIN 
"order_executors" ON "order_executors"."order_id" = "orders"."id" INNER 
JOIN "specialists" ON "specialists"."id" = 
"order_executors"."specialist_id" WHERE "specialists"."id" = 1
=> [#<Order id: 20, orderable_id: 11, orderable_type: "PlanDevelopment", 
client_id: 1, completion_status: "finished", created_at: "2013-05-13 
20:48:19", updated_at: "2013-05-14 00:36:38", price: 
#<BigDecimal:67e5898,'0.14E2',9(36)>>]

I see no additional columns but Order.by_executor(1).first.readonly? is 
true. Is that necessary?

p.s. Yes I know that I can set readonly(false) or explicitly specify select 
clause - so that records won't become readonly. But I want to understand 
why this blocking behavior is necessary (if it is still true) and what 
damage will be possible without readonly mark? Also I don't understand, how 
can I shot myself if I explicitly set readonly(false).

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/8a6c9dd6-526f-4b49-b52a-d96f7edb431e%40googlegroups.com?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to