gpt4 book ai didi

ruby-on-rails - 我怎样才能干这个代码?

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:20 24 4
gpt4 key购买 nike

这是一段 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

是否可以 DRY 这段代码?两段代码很相似,但是正如你所看到的,它们有一些不同,是否可以让它变得更简单?

最佳答案

作为第一步,您可以使用相同的变量,而不管配置文件类型如何,即

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

这是使用 Ruby 的 conditional operator其形式为 condition真值 : 假值。即,如果 @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_profileadmin_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

关于ruby-on-rails - 我怎样才能干这个代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com