Associations don't inherit #9

RichardStokes opened this Issue Feb 15, 2012 · 10 comments

5 participants


Followed the guide in the readme, and have Pen inheriting from Product fine. However, your readme says that Pen should inherit associations. I have a User model with a has_many :products relationship, however I do not get a User.pens method?


Also dynamic attribute-based finders don't work for inherited attributes. For instance, Product.find_by_name(string) works, but Pen.find_by_name(string) does not (assuming Pen inherits an attribute 'name' from Product)


Pen inherit associations defined in Product model. For example the belongs_to :store, not the other side of it has_many :products (at least for now!)

Dynamic attribute-based finders will be added soon.
For now Product.find_by_name("some name").specific is a replacement!


yes, i could use the dynamic attribute finders myself


I'm having a similar problem. My superclass model, Content, has a belongs_to :site. Then Page inherits from Content. If I try to get all pages for a site in Page.where :site => site I get a SQL error saying does not exist. Did I misconfigure something?


@vsanta you should use :include option on acts_as

There are no dynamic attributed finder yet, and submodels inherent associations defined in supermodel not opposite ones, but may be added in feature!


How does this :include options work? Is it a hash set to true? Sorry but I did not find any samples or docs on what it does and how to use it.

Another problem I'm having is when trying to set an object that is associated with the parent class. Ex: Content is superclass to Page. Content belongs to Site. If I try to have something like = some_site, it doesn't store the property.


@vsanta can you paste your models and migrations?


I have the same problem.
I have a Company that has Clients, which can be Sellers or Buyers..

class Company < ActiveRecord::Base
  attr_accessible :name, :short_name
  has_many :clients
  has_many :sellers
  has_many :buyers
  validates :name, presence: true
  validates :short_name, presence: true

class Client < ActiveRecord::Base
  belongs_to :company, dependent: :destroy
  attr_accessible :comments, :name, :reference, :tic
  validates :reference, :name, :company_id, presence: true

class Buyer < ActiveRecord::Base
  acts_as :client, include: true

class Seller < ActiveRecord::Base
  acts_as :client, include: true

In my controller I try to get the sellers doing this:

@sellers =

And this is the error I get:

SQLite3::SQLException: no such column: sellers.company_id: SELECT "sellers".* FROM "sellers" INNER JOIN "clients"     ON "clients"."as_client_id" = "sellers"."id" AND "clients"."as_client_type" = 'Seller' WHERE "sellers"."company_id" = 1

I'm really newbie to Rails, so maybe there's something I'm missing... any ideas?

Thanks in advance!


Sorry for late response!

Remove has_many :sellers and has_many :buyers from Company and define these functions:

def sellers() clients.where as_client_type: "Seller" end
def buyers()  clients.where as_client_type: "Buyer"  end

now will do what you expect


Hi @hzamani !
Now it works like a charm!
Thank you very much

@hzamani hzamani closed this Jul 17, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment