carlsednaoui / nycio

NYC Tech Volunteer Database
6 stars 2 forks source link

Refactor adding/deleting UserSkill's #31

Closed mattjstar closed 10 years ago

mattjstar commented 10 years ago

Refactor logic for adding and deleting UserSkill's in users#update from the User edit page. Seems a bit too bootstrappy to me:

if skill_id_params.present?
    original_array = @user.user_skills.pluck(:skill_id)
    skill_id_params.each do |skill_id|
        UserSkill.find_or_create_by(user_id: @user.id, skill_id: skill_id)
    end
    (original_array - skill_id_params).each do |skill_id|
        UserSkill.where(user_id: @user.id, skill_id: skill_id)[0].destroy
    end
end

def skill_id_params
    int_array = params[:skill_id].collect{|i| i.to_i}
    Skill.pluck(:id) & int_array == int_array ? int_array : []
end

Would it be better as a nested_attribute many-to-many situation (http://robots.thoughtbot.com/accepts-nested-attributes-for-with-has-many-through)? Honestly what I have above might just be the best option.

mattjstar commented 10 years ago

Ditto for devise Users::RegistrationsController create action:

def create
    super
    if skill_id_params.present?
        skill_id_params.each do |skill_id|
            UserSkill.find_or_create_by(user_id: resource.id, skill_id: skill_id)
        end
    end
end

private

def skill_id_params
    int_array = params[:skill_id].collect{|i| i.to_i}
    Skill.pluck(:id) & int_array == int_array ? int_array : []
end
carlsednaoui commented 10 years ago

:+1:

mattjstar commented 10 years ago

This is now dealt with in https://github.com/carlsednaoui/nycio/issues/37

miclovich commented 10 years ago

this was smart.