How can I dry this code?

This is the Ruby code:

  if (@user.isAdmin?)
    @admin_profile         = AdminProfile.new 
    @user.admin_profile    = @admin_profile 
    @admin_profile.save
    @user.admin_profile_id = @admin_profile.id 
  else        
    @personal_profile = PersonalProfile.new
    @user.personal_profile = @personal_profile
    @personal_profile.save
    @user.personal_profile_id = @personal_profile.id
  end                

Can I code this code? The two codes are very similar, but as you can see, they have some difference, is it possible to make this easier?

+3
source share
2 answers

As the first step, you can use the same variable regardless of the type of profile ie

@profile = @user.isAdmin? ? AdminProfile.new : PersonalProfile.new

Ruby , ? value if true: if false. .. @user.isAdmin? true, @profile ?. @user.isAdmin? false, @profile :. , ?, ?.

if (@user.isAdmin?)
  @user.admin_profile = @profile 
  @user.admin_profile_id = @profile.id 
else        
  @user.personal_profile = @profile
  @user.personal_profile_id = @profile.id
end 

, , Rails, , admin_profile admin_profile_id, @profile.id , hasn ' t . , , if/else :

if (@user.isAdmin?)
  @user.admin_profile = @profile 
else        
  @user.personal_profile = @profile
end 

create_association, belongs_to. Rails , .

@user.create_personal_profile
+5

, else

@user.isAdmin?? @user.admin_profile = @profile: @user.personal_profile = @profile

+1

Source: https://habr.com/ru/post/1754191/


All Articles