[英]How can I DRY this code?
这是一个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
是否可以干掉这段代码? 两个代码非常相似,但正如您所看到的,它们有一些区别,是否可以使其更简单?
作为第一步,无论配置文件类型如何,您都可以使用相同的变量
@profile = @user.isAdmin? ? AdminProfile.new : PersonalProfile.new
这是使用具有形式条件的 Ruby的条件运算符 ? 值为true : 如果为false 则为 value 。 即如果@user.isAdmin?
评估为true
然后@profile
获取后的值?
。 如果@user.isAdmin?
是假的,然后@profile
获取@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
更新
您还应该查看使用belongs_to
关联时获得的create_association方法。 您可以让Rails在一个步骤中创建并保存关联的对象,例如
@user.create_personal_profile
怎么样才能减少if else
@ user.isAdmin? ? @ user.admin_profile = @profile:@ user.personal_profile = @profile
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.