The counter is not working as I expected in has_many :through
relationship. I''ve posted this to Ruby on Rails: Talk, too, but
nobody seems to know about this.
I have very simple models. The Article and Pubtype models are in
many-to-many relationship, which is stored in the ArticleType model.
Here are the models:
class Article < ActiveRecord::Base
has_many :article_types
has_many :pubtypes, :through => :article_types
end
class Pubtype < ActiveRecord::Base
has_many :article_types
has_many :articles, :through => :article_types
end
class ArticleType < ActiveRecord::Base
belongs_to :article
belongs_to :pubtype
end
Here is the actual schema:
ActiveRecord::Schema.define(:version => 8) do
...
create_table "article_types", :force => true do |t|
t.column "article_id", :integer
t.column "pubtype_id", :integer
end
create_table "articles", :force => true do |t|
t.column "title", :text
end
create_table "pubtypes", :force => true do |t|
t.column "title", :string
t.column "articles_count", :integer, :default => 0, :null =>
false
end
...
end
And here is the weird situation (''>>'' is irb and
''##'' is log):
>> pubtype = Pubtype.find(1)
=> #<Pubtype:0x337a728
@attributes={"title"=>"News",
"id"=>"1",
"articles_count"=>"1"}>
## Pubtype Load (0.000559) SELECT * FROM pubtypes WHERE (pubtypes.id
= 1)
>> pubtype.articles_count
=> 1
## Article Load (0.008023) SELECT articles.* FROM articles INNER JOIN
article_types ON articles.id = article_types.article_id WHERE
((article_types.pubtype_id = 1))
Here, the already loaded "articles_count" attribute value of the
pubtype object is not used and a actual select sql was called to count
the number of articles that belong to the pubtype. It seems that rails
intercepted the method call and did an unnecessary magic.
Is this an intentional behaviour for some good reason?
I''m running on the edge rails.
About your application''s environment
Ruby version 1.8.5 (i686-darwin8.8.1)
RubyGems version 0.9.0
Rails version 1.2.0
Active Record version 1.14.4
Action Pack version 1.12.5
Action Web Service version 1.1.6
Action Mailer version 1.2.5
Active Support version 1.3.1
Edge Rails revision 5717
Application root /Users/joon/Sites/clickstream
Environment development
Database adapter mysql
Database schema version 8
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com
To unsubscribe from this group, send email to
rubyonrails-core-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---