zanona
zanona

Reputation: 12717

rails model :has_many with self arguments (NOT association)

Well, I don't know if I'm completely wrong, but I really can't find a very practical and straight forward way to do something like this:

class User < ActiveRecord::Base

has_many :creations

end

but the thing is, I just want the user to have many creations if the user.developer == true where user.developer is just a boolean field inside the Users table.

So any ideas on how exactly could I do it directly from the model?

Resuming, when the user is not a developer if you try to get User.first.creations, User.first.creations.new ... create...destroy, etc you get a NoMethodError but if it is a developer you can build a new creation.

The only way I managed to do it is extending the model and from the extension check if the proxy_owner.developer == true but by doing this I had to rewrite all the actions such new, create, update, etc...

Any help would be much appreciated Thanks a lot

Upvotes: 0

Views: 728

Answers (2)

Jared
Jared

Reputation: 2457

How about subclassing User and only specifying the has_many on the developer subclass? Developer would then pick up any logic from User and Users wouldn't have any creations.

class User < ActiveRecord::Base
end

class Developer < User
  has_many :creations
end

Upvotes: 2

cwninja
cwninja

Reputation: 9778

Including this may work. If not you may have to resort to alias_method_chain, but I hear that has links to serious organised crime, so watch yourself.

module CreationsJustForDevelopers
  def creations(*args)
    if developer?
      super
    else
      raise NoMethodError, "Only developers get creations."
    end
  end
end

Not sure what you are referring to with all that talk of overriding new, create, update etc… but the only other method I can think of to remove is creation_ids, but who cares about that?

Upvotes: 0

Related Questions