Thanks for the reply, I'll play with it some more and see how it goes. As for the parsing I was fortunate to stumble across the ingreedy gem which takes care of extracting units, ingredients etc from a string so I'm going to roll with that for now.
Thanks On Wednesday, 25 November 2015 15:41:38 UTC, Jeremy Evans wrote: > > On Wednesday, November 25, 2015 at 7:28:10 AM UTC-8, Drew wrote: >> >> Just started playing with sequel recently and I'm loving it so far. I've >> been using it on a personal project for a bit of fun (a recipe manager). >> However I've gotten a little stumped recently when it comes to persisting a >> recipe. >> >> The schema looks a bit like this currently (simplified): >> >> Recipe Table: >> id >> title >> cooking time >> preparation time >> etc etc. >> >> Ingredient Table >> id >> name >> >> RecipeIngredient Table >> id >> recipe_id (foreign key to id in recipe table) >> ingredient_id (foreign key to id in ingredient table) >> >> Obviously with that schema there's no way to store quantities of of >> ingredients so I thought I might alter the RecipeIngredient table to look >> like this: >> >> RecipeIngredient >> id >> recipe_id >> ingredient_id >> *amount* >> *unit* >> *description* >> >> Then I could give a RecipeIngredient a description (like *"2tbsp cocoa"*) >> and derive the amount, unit and ingredient name from it. >> >> What I'm struggling with though is before I was just using >> nested_attributes to create a recipe and an associated ingredient. Now that >> I actually need to do additional processing on an attribute in the join >> table I'm unsure how to approach this. >> >> I considered adding another relation to my recipe model and adding a >> model for the join table like this: >> >> class Recipe < Sequel::Model >> many_to_many :ingredients, join_table: :recipe_ingredients >> one_to_many :recipe_ingredients >> >> plugin :nested_attributes >> nested_attributes :recipe_ingredients >> end >> >> class RecipeIngredient < Sequel::Model >> many_to_one :recipe >> many_to_one :ingredient >> >> plugin :nested_attributes >> nested_attributes :ingredient >> >> def before_save >> do_magical_ingredient_parsing >> super >> end >> end >> >> My thinking being that I could pass the description in the >> recipe_ingredients_attributes hash and then parse it in a before_save hook >> in the RecipeIngredient model. But I'm unsure if that's the right approach >> as I would then have to build an ingredient_attributes hash in the >> RecipeIngredient model to handle creating the record in the ingredient >> table. >> > > I think you are mostly on the right track with your RecipeIngredient and > recipe_ingredients_attributes hash. However, I'm not sure it's wise to try > to parse a string like "2tbsp cocoa" into an amount, unit, and ingredient > name, unless you have experience with natural language processing (NLP). > It's something that looks simple but is very difficult to get a correct, > robust implementation. > > Thanks, > Jeremy > -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sequel-talk. For more options, visit https://groups.google.com/d/optout.
