I came across this exact same behavior about three months ago.
If every other access to an AR class with a default scope honors that scope in
the generated SQL, why not in a join situation?
Wes
Sent from my iPhone
On Jun 15, 2013, at 9:37 AM, soffolk Zhu <zlx.star@gmail.com> wrote:
> Hi, guys
>
> I have a puzzle about default_scope.
>
> Suppose I have two model:
>
> class User < ActiveRecord::Base
> has_many :blogs
> default_scope where(deleted_at: nil)
> end
>
> class Blog < ActiveRecord::Base
> belongs_to :user
> end
> I want to produce sqlselect blogs.* from blogs inner join users on users.id
= blogs.user_id and users.deleted_at is null
>
> And the code Blog.joins(:user), which I think is good, produceselect
blogs.* from blogs inner join users on users.id = blogs.user_id
>
> The default_scope is not appended to the join condition, why?
>
> To reach my goal, I must add conditions to belongs_to:
>
> class Blog < ActiveRecord::Base
> belongs_to :user, conditions: "deleted_at is null"
> end
> Why not append default_scope to join condition directly as the doc said:
>
> Use this macro in your model to set a default scope for all operations on
the model.
> --
> You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
email to rubyonrails-core+unsubscribe@googlegroups.com.
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to rubyonrails-core+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/groups/opt_out.