Как я могу высушить этот код? - PullRequest
3 голосов
/ 12 июля 2010

Это код Ruby:

  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                

Можно ли СУШИТЬ этот код?Два кода очень похожи, но, как вы можете видеть, они имеют некоторое различие, возможно ли сделать его проще?

Ответы [ 2 ]

5 голосов
/ 12 июля 2010

В качестве первого шага вы можете использовать одну и ту же переменную независимо от типа профиля, т.е.

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

Это использует условный оператор Руби , который имеет форму условие ? значение, если true : значение, если 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 не будет установлен, поскольку профиль не сохранен.Так что, возможно, вы могли бы уменьшить if/else до:

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

Обновление

Вы также должны посмотреть на метод create_association , который вы получаетекогда вы используете belongs_to ассоциацию.Вы можете заставить Rails создавать и сохранять связанный объект за один шаг, например

@user.create_personal_profile
1 голос
/ 12 июля 2010

что об этом уменьшить, если еще

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...