I have two different models representing two different data sets
but I want to use the same controler and views to process them
how can I DRY this up so I don’t have to use a separate controller and view
for each model?
Wasn’t it easier to DRY up your models instead of controllers and
views?
If those data sets use logic that is close enough to require identical
views, chances are you could merge those models with an extra column
or two for identifying the kind. Just a wild guess, of course, since
you gave us only so much details.
Otherwise, I think with the URLs you have posted, you may not need
helpers. Use the model1/model2 part as an extra parameter, and process
that in the controller to get the right records. (Sorry if I’m not
making any sense).
you made perfect sense…I have thought about those two options as well,
using the same model would be easy, but I thought it might be cleaner to
have two different models, for the two slightly different
datasets…(normalisation)
but testing for the model name as a parameter in the route would be
should
be just as easy…
however out of the three options…i’m not sure which one is the ‘rails’
way
to do it…
however out of the three options…i’m not sure which one is the ‘rails’ way
to do it…
Well, I’m quite new to Rails so I wouldn’t know what exactly would be
the true Rails way. But I guess the less you fight Rails, the closer
your are to Rails way.
I don’t know if it could help in your case but you could do single-
table inheritance :
(see Peak Obsession )
to put things simply, you add a column named “type” (with datatype set
to string) in the table that will contain both models
then, in the general model file:
class GeneralModel < ActiveRecord::Base
code goes here
end
class SpecializedModel1 < GeneralModel
end
class SpecializedModel2 < GeneralModel
end
then if each specialized model has some really unique properties, you
can wrap these in a column that you would then serialize into a
specific object type, which could be a Hash or anything else
(serialization is also covered in the article I provided the link
for).