model languages skills with ruby on rails and mongodb -
i'm starting learn ror , mongodb. started creating simple cv application users specify level of expertise consider in given language (between 1 - 5). language collection
languages collection
{ {id:a1, language:"english", status:active}, {id:a2, language:"spanish", status:inactive} } user collection
{ {id:u1, name:"user name", languages:{{id:a1, skill:4},{id:a2, skill:3}}}, {id:u2, name:"mac link", languages:{{id:a1, skill:2},{id:a2, skill:5}}} } i don't know how model ror , mongodb because need load languages collection default , put select box choose skill level. after loading everything, user select skill level , then, save. language not saved, (it save model).
if give me guidance, appreciated.
multiple approaches can used, instance
the general idea, languages , users loaded separately. if need languages, displayin purposes (language name kept in languages collection), use mapping proposed @ end. if more sophisticated logic needed, put somewhere in service layer
hope helps.
class languagesrepo def load_language_mapping languages = mongo_client.search({}).to_a #will array languages languages.inject({}) |memo, current_language| memo[current_language['id']] = current_language end # result hash { 1 => { 'id' => 1, 'language': 'english'} } end end class user class language include activemodel::model attr_accessor :id, :skill end include activemodel::model attr_accessor :id, :name, :languages end class userrepo def load_user(id) json = mongo_client.query(id: id) usermongoparser.new(json).parse #will return filled user instance end def save_user(user) mongo_client.update({id: user.id}, user.as_json) #depending on client use #or mongo_client.update({id: user.id}, usermongoserializer.new(user).serialize) #depending on client use end end
somewhere in haml/erb user form file
%ul user_form.languages.each |language_item| %li = user_form.hidden_field :id = user_form.label :skill, @languages_mapping[language_item.id]['name'] #will display language name label = user_form.text_field :skill
Comments
Post a Comment