validate sub models in parent model?

class Foo < ActiveRecoed::Base   has_many :www_links, :as => :owner end

class WwwLink < ActiveRecord::Base   belongs_to :owner, :polymorphic => true   attr_accessible :href end

I want to ensure that each Foo instance does not have same links (href).

My first attempt would be to write validation in Foo that checks all its www_links. But then I would also have to do it in WwwLink class. That would not be DRY.

Any other ideas?

class Foo < ActiveRecoed::Base has_many :www_links, :as => :owner end

class WwwLink < ActiveRecord::Base belongs_to :owner, :polymorphic => true attr_accessible :href end

I want to ensure that each Foo instance does not have same links (href).

I don't understand what you mean by the above.

Colin

Colin Law wrote in post #971843:

class Foo < ActiveRecoed::Base has_many :www_links, :as => :owner end

class WwwLink < ActiveRecord::Base belongs_to :owner, :polymorphic => true attr_accessible :href end

I want to ensure that each Foo instance does not have same links (href).

I don't understand what you mean by the above.

Colin

  test "should not allow for adding two same links" do     # given     foo1 = create_foo.save!     link1 = foo1.www_links.create(:href => 'wp.pl')     link1.save!

    foo2 = create_foo.save!     link2 = foo2.www_links.create(:href => 'wp.pl')

    # when     link2.save!

    # then     errors occured !   end

I will put this logic in WwwLinks controller.

So you are just wanting uniqueness of www_link.href? Will not validates_uniqueness_of in WwwLink class (backed up by a unique constraint in the database of course) do the job? I think in this case it will be the foo2.www_links.create that will fail.

Colin

Colin Law wrote in post #971847:

So you are just wanting uniqueness of www_link.href? Will not validates_uniqueness_of in WwwLink class (backed up by a unique constraint in the database of course) do the job? I think in this case it will be the foo2.www_links.create that will fail. Colin

The constraint is on "owner" and "href", not "href" itself. I can have multiple links with the same href. But those cannot be with the same owner_id.

validates_uniqueness_of(:href, :scope => [:owner_type, :owner_id])

That is not what your test says, you have too Foo objects, foo1 and foo2 and are asking it to fail when you add the link to the second one.

Colin