case study

hi,

i’ trying to re-create my project from php to rails. But now Im faced with a pb to witch I had solution with php, but I cant figure how to make it work with rails

here my tables

ads

id

category_id

title

text

ad_real_estate_details

id

ad_id

nb_room

floor

ad_car_details

id

ad_id

color

brand

here what I succeed to do

class Ad < ActiveRecord::Base

attr_accessible :category_id :title, :text, :ad_real_estate_details

has_one :ad_real_estate_details

accepts_nested_attributes_for :ad_real_estate_details, allow_destroy: true

end

class AdRealEstateDetail < ActiveRecord::Base

belongs_to :ad

validates :ad_id, presence: true

end

but this only work for other category than real_estate

so I was thinking of polymorphism, but polymorphism mean I should add a reference in my “ad” table to the detail tables, and remove annonce_id from detail tables , what I thing is non-sense as some ads can have no details, but details are non-sense without an ad.

I was also thinking of a class AdDetails, and AdRealEstateDetail would inherite from it, but this is not possible with rails as all subclasses will share the same table

does anyone have a solution for this kind of problem ?

thanks

hi,

i' trying to re-create my project from php to rails. But now Im faced with a pb to witch I had solution with php, but I cant figure how to make it work with rails

here my tables

ads   id   category_id   title   text

ad_real_estate_details   id   ad_id   nb_room   floor

ad_car_details   id   ad_id   color   brand

here what I succeed to do

class Ad < ActiveRecord::Base   attr_accessible :category_id :title, :text, :ad_real_estate_details   has_one :ad_real_estate_details   accepts_nested_attributes_for :ad_real_estate_details, allow_destroy: true end

class AdRealEstateDetail < ActiveRecord::Base   belongs_to :ad   validates :ad_id, presence: true end

but this only work for other category than real_estate

so I was thinking of polymorphism, but polymorphism mean I should add a reference in my "ad" table to the detail tables, and remove annonce_id from detail tables , what I thing is non-sense as some ads can have no details, but details are non-sense without an ad.

i think you have it right when you mentioned using polymorphic associations. it is fine to leave the polymorphic association nil if the ad has no details if that's what you're worried about.

hi,

i’ trying to re-create my project from php to rails. But now Im faced with a pb to witch I had solution with php, but I cant figure how to make it work with rails

here my tables

ads

id

category_id

title

text

ad_real_estate_details

id

ad_id

nb_room

floor

ad_car_details

id

ad_id

color

brand

here what I succeed to do

class Ad < ActiveRecord::Base

attr_accessible :category_id :title, :text, :ad_real_estate_details

This should be :add_real_estate_details_attributes

Hi,

thanks for answer. My pb with polymorphic is that I would have to create first in db a ligne for ad_real_estate_details and then create my ad, what is non sense for me, in terms of logic.

and it might brings some pb as I read there ruby on rails - accepts_nested_attributes_for with belongs_to polymorphic - Stack Overflow

lets have another example which is almost the same

image we have Student (age, classe, …) and Teacher (subject_taught) classes that inherit from User classes. I would be non sense to create first a Teacher entity, and then to link it to User, no ?

Hi,

thanks for answer. My pb with polymorphic is that I would have to create first in db a ligne for ad_real_estate_details and then create my ad, what is non sense for me, in terms of logic. and it might brings some pb as I read there ruby on rails - accepts_nested_attributes_for with belongs_to polymorphic - Stack Overflow

lets have another example which is almost the same

image we have Student (age, classe, ...) and Teacher (subject_taught) classes that inherit from User classes. I would be non sense to create first a Teacher entity, and then to link it to User, no ?

Why are you thinking of creating the details first? Why not create the ad first, then add the details later? Sometimes, accepts_nested_attributes_for is not always the answer for creating association records. Try to look into virtual attributes and callbacks.

I want to do

@ad = Ad.attributes(params[:ad]) maybe Im wrong, but as I understood about polymorphic in rails, this would thow an error say that ad_real_estate_details does not exist

as they explained here http://stackoverflow.com/questions/3969025/accepts-nested-attributes-for-with-belongs-to-polymorphic

I want to do @ad = Ad.attributes(params[:ad]) maybe Im wrong, but as I understood about polymorphic in rails, this would thow an error say that ad_real_estate_details does not exist

as they explained here http://stackoverflow.** com/questions/3969025/accepts-**nested-attributes-for-with-** belongs-to-polymorphic<ruby on rails - accepts_nested_attributes_for with belongs_to polymorphic - Stack Overflow;

As I've said, don't use accepts_nested_attributes_for. Create a getter and setter method for each kind of details that you want. If you don't want to do that, create an attr_accessor for the details, and create the detail record in a callback.

hi

thanks for answer sorry I quite new in RoR. If I do how u said, will I have to validate “manually” all the attributes for details ?

hi

thanks for answer sorry I quite new in RoR. If I do how u said, will I have to validate "manually" all the attributes for details ?

Now that you've asked that, I'm not sure. You can try to use validates_associated and use a before_validation callback

hi

thanks for answer sorry I quite new in RoR. If I do how u said, will I have to validate "manually" all the attributes for details ?

If you are new to rails there are probably many other basic features that you are not aware of. I suggest you work right through a good rails tutorial such as railstutorial.org, which is free to use online. That will introduce you to the basics. Also look through the Rails Guides, the one called Active Record Validations and Callbacks should cover what you are looking for. Also look through the others.

Colin