Performance belongs_to :user
User has_one :performance
Performance
有许多属性:
- USER_ID
- attr1,默认:nil
- attr2,默认:nil
- attr3,默认:nil
- .....
我想要执行
@user.performance.update(
attr1: 1,
attr2: 2,
attr3: 3,
.....
)
但当然不会因为@user.performance == nil
而默认。
属性列表非常长,所以我希望避免重复它们:
unless @user.performance
Performance.create(
user_id: @user.id,
attr1: 1,
attr2: 2,
attr3: 3,
.....
)
else
@user.performance.update(
attr1: 1,
attr2: 2,
attr3: 3,
.....
)
end
请让我知道如何实现它。谢谢!
我的问题是如何避免在我的代码中重复参数列表。我在create
和update
方法中都有相同的参数。
答案 0 :(得分:0)
您可以使用此处引用的first_or_create apidocks 获取对象的引用或创建它(如果它不存在)。然后根据需要更新它。
答案 1 :(得分:0)
或者使用@user.build_performance(k:v, k1:v1, ..)
这将使早期版本无效或创建新版本,并使用提供的最新属性初始化用户的性能记录。
答案 2 :(得分:0)
你可以这样做:
class User < ActiveRecord::Base
has_one :performance
def performance
super || build_performance
end
end
然后:
@user.perfomance.update({
attr1: 1,
attr2: 2,
attr3: 3,
# ...
})
如果数据库不存在,则更新将在数据库中创建性能